Zelda Classic Coverage Report


Directory: src/
File: src/qst.cpp
Date: 2023-01-30 06:44:06
Exec Total Coverage
Lines: 7029 11497 61.1%
Functions: 66 105 62.9%
Branches: 4357 9875 44.1%

Line Branch Exec Source
1 //--------------------------------------------------------
2 // Zelda Classic
3 // by Jeremy Craner, 1999-2000
4 //
5 // qst.cc
6 //
7 // Code for loading '.qst' files in ZC and ZQuest.
8 //
9 //--------------------------------------------------------
10
11 #ifndef __GTHREAD_HIDE_WIN32API
12 #define __GTHREAD_HIDE_WIN32API 1
13 #endif //prevent indirectly including windows.h
14
15 #include "precompiled.h" //always first
16
17
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 #include <stdio.h>
18 #include <string.h>
19 #include <string>
20 #include <map>
21 #include <vector>
22 #include <assert.h>
23
24
25 #include "metadata/sigs/devsig.h.sig"
26 #include "metadata/sigs/compilersig.h.sig"
27 #include "metadata/versionsig.h"
28 #include "base/zc_alleg.h"
29 #include "base/zdefs.h"
30 #include "base/colors.h"
31 #include "tiles.h"
32 #include "base/zsys.h"
33 #include "qst.h"
34 //#include "zquest.h"
35 #include "defdata.h"
36 #include "subscr.h"
37 #include "font.h"
38 #include "zc_custom.h"
39 #include "sfx.h"
40 #include "md5.h"
41 #include "ffscript.h"
42 #include "particles.h"
43 #include "dialog/alert.h"
44 //FFScript FFCore;
45 extern FFScript FFCore;
46 extern ZModule zcm;
47 extern zcmodule moduledata;
48 extern uint8_t __isZQuest;
49 extern sprite_list guys, items, Ewpns, Lwpns, Sitems, chainlinks, decorations;
50 extern particle_list particles;
51 extern void setZScriptVersion(int32_t s_version);
52 //FFSCript FFEngine;
53
54 int32_t temp_ffscript_version = 0;
55 static bool read_ext_zinfo = false, read_zinfo = false;
56 static bool loadquest_report = false;
57 static char const* loading_qst_name = NULL;
58 static byte loading_qst_num = 0;
59
60 #ifdef _MSC_VER
61 #define strncasecmp _strnicmp
62 #endif
63
64 #ifndef _AL_MALLOC
65 #define _AL_MALLOC(a) _al_malloc(a)
66 #define _AL_FREE(a) _al_free(a)
67 #endif
68
69 using std::string;
70 using std::pair;
71
72 // extern bool debug;
73 extern int32_t hero_animation_speed; //lower is faster animation
74 extern std::vector<mapscr> TheMaps;
75 extern zcmap *ZCMaps;
76 extern MsgStr *MsgStrings;
77 extern DoorComboSet *DoorComboSets;
78 extern dmap *DMaps;
79 extern newcombo *combobuf;
80 extern byte *colordata;
81 //extern byte *tilebuf;
82 extern tiledata *newtilebuf;
83 extern byte *trashbuf;
84 extern itemdata *itemsbuf;
85 extern wpndata *wpnsbuf;
86 extern comboclass *combo_class_buf;
87 extern guydata *guysbuf;
88 extern ZCHEATS zcheats;
89 extern zinitdata zinit;
90 extern char palnames[MAXLEVELS][17];
91 extern int32_t memrequested;
92 extern char *byte_conversion(int32_t number, int32_t format);
93 extern char *byte_conversion2(int32_t number1, int32_t number2, int32_t format1, int32_t format2);
94 26 string zScript;
95 26 std::map<int32_t, script_slot_data > ffcmap;
96 26 std::map<int32_t, script_slot_data > globalmap;
97 26 std::map<int32_t, script_slot_data > genericmap;
98 26 std::map<int32_t, script_slot_data > itemmap;
99 26 std::map<int32_t, script_slot_data > npcmap;
100 26 std::map<int32_t, script_slot_data > ewpnmap;
101
0/2
✗ Branch 0 not taken.
✗ Branch 1 not taken.
26 std::map<int32_t, script_slot_data > lwpnmap;
102 26 std::map<int32_t, script_slot_data > playermap;
103 26 std::map<int32_t, script_slot_data > dmapmap;
104 26 std::map<int32_t, script_slot_data > screenmap;
105 26 std::map<int32_t, script_slot_data > itemspritemap;
106 26 std::map<int32_t, script_slot_data > comboscriptmap;
107 void free_newtilebuf();
108 bool combosread=false;
109 bool mapsread=false;
110 bool fixffcs=false;
111 bool fixpolsvoice=false;
112
113
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 const std::string script_slot_data::DEFAULT_FORMAT = "%s %s";
114
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 const std::string script_slot_data::INVALID_FORMAT = "%s --%s";
115
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 const std::string script_slot_data::DISASSEMBLED_FORMAT = "%s ++%s";
116
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 const std::string script_slot_data::ZASM_FORMAT = "%s ==%s";
117
118 char qstdat_string[2048] = { 0 };
119
120 static zinfo* load_tmp_zi = NULL;
121
122 int32_t memDBGwatch[8]= {0,0,0,0,0,0,0,0}; //So I can monitor memory crap
123 const byte clavio[9]={97,109,111,110,103,117,115,0};
124
125 //enum { qe_OK, qe_notfound, qe_invalid, qe_version, qe_obsolete,
126 // qe_missing, qe_internal, qe_pwd, qe_match, qe_minver };
127
128 extern combo_alias combo_aliases[MAXCOMBOALIASES];
129 extern combo_pool combo_pools[MAXCOMBOPOOLS];
130 const char *qst_error[] =
131 {
132 "OK","File not found","Invalid quest file",
133 "Version not supported","Obsolete version",
134 "Missing new data" , /* but let it pass in ZQuest */
135 "Internal error occurred", "Invalid password",
136 "Doesn't match saved game", "Save file is for older version of quest; please start new save",
137 "Out of memory", "File Debug Mode", "Canceled", "", "No quest assigned"
138 };
139
140 //for legacy quests -DD
141 enum { ssiBOMB, ssiSWORD, ssiSHIELD, ssiCANDLE, ssiLETTER, ssiPOTION, ssiLETTERPOTION, ssiBOW, ssiARROW, ssiBOWANDARROW, ssiBAIT, ssiRING, ssiBRACELET, ssiMAP,
142 ssiCOMPASS, ssiBOSSKEY, ssiMAGICKEY, ssiBRANG, ssiWAND, ssiRAFT, ssiLADDER, ssiWHISTLE, ssiBOOK, ssiWALLET, ssiSBOMB, ssiHCPIECE, ssiAMULET, ssiFLIPPERS,
143 ssiHOOKSHOT, ssiLENS, ssiHAMMER, ssiBOOTS, ssiDINSFIRE, ssiFARORESWIND, ssiNAYRUSLOVE, ssiQUIVER, ssiBOMBBAG, ssiCBYRNA, ssiROCS, ssiHOVERBOOTS,
144 ssiSPINSCROLL, ssiCROSSSCROLL, ssiQUAKESCROLL, ssiWHISPRING, ssiCHARGERING, ssiPERILSCROLL, ssiWEALTHMEDAL, ssiHEARTRING, ssiMAGICRING, ssiSPINSCROLL2,
145 ssiQUAKESCROLL2, ssiAGONY, ssiSTOMPBOOTS, ssiWHIMSICALRING, ssiPERILRING, ssiMAX
146 };
147
148 static byte deprecated_rules[QUESTRULES_NEW_SIZE];
149
150
151 void delete_combo_aliases()
152 {
153 for(int32_t j(0); j<256; j++)
154 {
155 if(combo_aliases[j].combos != NULL)
156 {
157 delete[] combo_aliases[j].combos;
158 combo_aliases[j].combos=NULL;
159 }
160
161 if(combo_aliases[j].csets != NULL)
162 {
163 delete[] combo_aliases[j].csets;
164 combo_aliases[j].csets=NULL;
165 }
166 }
167
168 }
169
170 char *byte_conversion(int32_t number, int32_t format)
171 {
172 static char num_str[40];
173
174 if(format==-1) //auto
175 {
176 format=1; //bytes
177
178 if(number>1024)
179 {
180 format=2; //kilobytes
181 }
182
183 if(number>1024*1024)
184 {
185 format=3; //megabytes
186 }
187
188 if(number>1024*1024*1024)
189 {
190 format=4; //gigabytes (dude, what are you doing?)
191 }
192 }
193
194 switch(format)
195 {
196 case 1: //bytes
197 sprintf(num_str,"%db",number);
198 break;
199
200 case 2: //kilobytes
201 sprintf(num_str,"%.2fk",float(number)/1024);
202 break;
203
204 case 3: //megabytes
205 sprintf(num_str,"%.2fM",float(number)/(1024*1024));
206 break;
207
208 case 4: //gigabytes
209 sprintf(num_str,"%.2fG",float(number)/(1024*1024*1024));
210 break;
211
212 default:
213 exit(1);
214 break;
215 }
216
217 return num_str;
218 }
219
220 364 char *byte_conversion2(int32_t number1, int32_t number2, int32_t format1, int32_t format2)
221 {
222 static char num_str1[40];
223 static char num_str2[40];
224 static char num_str[80];
225
226
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 364 times.
364 if(format1==-1) //auto
227 {
228 364 format1=1; //bytes
229
230
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 364 times.
364 if(number1>1024)
231 {
232 364 format1=2; //kilobytes
233 364 }
234
235
2/2
✓ Branch 0 taken 260 times.
✓ Branch 1 taken 104 times.
364 if(number1>1024*1024)
236 {
237 104 format1=3; //megabytes
238 104 }
239
240
1/2
✓ Branch 0 taken 364 times.
✗ Branch 1 not taken.
364 if(number1>1024*1024*1024)
241 {
242 format1=4; //gigabytes (dude, what are you doing?)
243 }
244 364 }
245
246
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 364 times.
364 if(format2==-1) //auto
247 {
248 364 format2=1; //bytes
249
250
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 364 times.
364 if(number2>1024)
251 {
252 364 format2=2; //kilobytes
253 364 }
254
255
2/2
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 338 times.
364 if(number2>1024*1024)
256 {
257 338 format2=3; //megabytes
258 338 }
259
260
1/2
✓ Branch 0 taken 364 times.
✗ Branch 1 not taken.
364 if(number2>1024*1024*1024)
261 {
262 format2=4; //gigabytes (dude, what are you doing?)
263 }
264 364 }
265
266
2/5
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 260 times.
✓ Branch 3 taken 104 times.
✗ Branch 4 not taken.
364 switch(format1)
267 {
268 case 1: //bytes
269 sprintf(num_str1,"%db",number1);
270 break;
271
272 case 2: //kilobytes
273 260 sprintf(num_str1,"%.2fk",float(number1)/1024);
274 260 break;
275
276 case 3: //megabytes
277 104 sprintf(num_str1,"%.2fM",float(number1)/(1024*1024));
278 104 break;
279
280 case 4: //gigabytes
281 sprintf(num_str1,"%.2fG",float(number1)/(1024*1024*1024));
282 break;
283
284 default:
285 exit(1);
286 break;
287 }
288
289
2/5
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 338 times.
✗ Branch 4 not taken.
364 switch(format2)
290 {
291 case 1: //bytes
292 sprintf(num_str2,"%db",number2);
293 break;
294
295 case 2: //kilobytes
296 26 sprintf(num_str2,"%.2fk",float(number2)/1024);
297 26 break;
298
299 case 3: //megabytes
300 338 sprintf(num_str2,"%.2fM",float(number2)/(1024*1024));
301 338 break;
302
303 case 4: //gigabytes
304 sprintf(num_str2,"%.2fG",float(number2)/(1024*1024*1024));
305 break;
306
307 default:
308 exit(1);
309 break;
310 }
311
312 364 sprintf(num_str, "%s/%s", num_str1, num_str2);
313 364 return num_str;
314 }
315
316 char *ordinal(int32_t num)
317 {
318 static const char *ending[4] = {"st","nd","rd","th"};
319 static char ord_str[8];
320
321 char *end;
322 int32_t t=(num%100)/10;
323 int32_t n=num%10;
324
325 if(n>=1 && n<4 && t!=1)
326 end = (char *)ending[n-1];
327 else
328 end = (char *)ending[3];
329
330 sprintf(ord_str,"%d%s",num%10000,end);
331 return ord_str;
332 }
333
334 26 int32_t get_version_and_build(PACKFILE *f, word *version, word *build)
335 {
336 int32_t ret;
337 26 *version=0;
338 26 *build=0;
339 26 byte temp_map_count=map_count;
340 byte temp_midi_flags[MIDIFLAGS_SIZE];
341 26 memcpy(temp_midi_flags, midi_flags, MIDIFLAGS_SIZE);
342
343 zquestheader tempheader;
344
345
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 if(!f)
346 {
347 return qe_invalid;
348 }
349
350 26 ret=readheader(f, &tempheader, true);
351
352
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 if(ret)
353 {
354 return ret;
355 }
356
357 26 map_count=temp_map_count;
358 26 memcpy(midi_flags, temp_midi_flags, MIDIFLAGS_SIZE);
359 26 *version=tempheader.zelda_version;
360 26 *build=tempheader.build;
361 26 return 0;
362 26 }
363
364
365 26 bool find_section(PACKFILE *f, int32_t section_id_requested)
366 {
367
368
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 if(!f)
369 {
370 return false;
371 }
372
373 int32_t section_id_read;
374 26 bool catchup=false;
375 word dummy;
376 byte tempbyte;
377 char tempbuf[65536];
378
379
380
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 switch(section_id_requested)
381 {
382 case ID_RULES:
383 case ID_STRINGS:
384 case ID_MISC:
385 case ID_TILES:
386 case ID_COMBOS:
387 case ID_CSETS:
388 case ID_MAPS:
389 case ID_DMAPS:
390 case ID_DOORS:
391 case ID_ITEMS:
392 case ID_WEAPONS:
393 case ID_COLORS:
394 case ID_ICONS:
395 case ID_INITDATA:
396 case ID_GUYS:
397 case ID_MIDIS:
398 case ID_CHEATS:
399 26 break;
400
401 default:
402 al_trace("Bad section requested!\n");
403 return false;
404 break;
405 }
406
407 dword section_size;
408
409 //section id
410
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 if(!p_mgetl(&section_id_read,f,true))
411 {
412 return false;
413 }
414
415
1/2
✓ Branch 0 taken 5304 times.
✗ Branch 1 not taken.
5304 while(!pack_feof(f))
416 {
417
2/2
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 5278 times.
5304 switch(section_id_read)
418 {
419 case ID_RULES:
420 case ID_STRINGS:
421 case ID_MISC:
422 case ID_TILES:
423 case ID_COMBOS:
424 case ID_CSETS:
425 case ID_MAPS:
426 case ID_DMAPS:
427 case ID_DOORS:
428 case ID_ITEMS:
429 case ID_WEAPONS:
430 case ID_COLORS:
431 case ID_ICONS:
432 case ID_INITDATA:
433 case ID_GUYS:
434 case ID_MIDIS:
435 case ID_CHEATS:
436 26 catchup=false;
437 26 break;
438
439 default:
440 5278 break;
441 }
442
443
444
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5304 times.
5304 while(catchup)
445 {
446 //section id
447 section_id_read=(section_id_read<<8);
448
449 if(!p_getc(&tempbyte,f,true))
450 {
451 return false;
452 }
453
454 section_id_read+=tempbyte;
455 }
456
457
1/2
✓ Branch 0 taken 5304 times.
✗ Branch 1 not taken.
5304 if(section_id_read==section_id_requested)
458 {
459 return true;
460 }
461 else
462 {
463 //section version info
464
1/2
✓ Branch 0 taken 5304 times.
✗ Branch 1 not taken.
5304 if(!p_igetw(&dummy,f,true))
465 {
466 return false;
467 }
468
469
1/2
✓ Branch 0 taken 5304 times.
✗ Branch 1 not taken.
5304 if(!p_igetw(&dummy,f,true))
470 {
471 return false;
472 }
473
474 //section size
475
1/2
✓ Branch 0 taken 5304 times.
✗ Branch 1 not taken.
5304 if(!p_igetl(&section_size,f,true))
476 {
477 return false;
478 }
479
480 //pack_fseek(f, section_size);
481
2/2
✓ Branch 0 taken 1703910 times.
✓ Branch 1 taken 5304 times.
1709214 while(section_size>65535)
482 {
483 1703910 pfread(tempbuf,65535,f,true);
484 1703910 tempbuf[65535]=0;
485 1703910 section_size-=65535;
486 }
487
488
2/2
✓ Branch 0 taken 5174 times.
✓ Branch 1 taken 130 times.
5304 if(section_size>0)
489 {
490 130 pfread(tempbuf,section_size,f,true);
491 130 tempbuf[section_size]=0;
492 130 }
493 }
494
495 //section id
496
2/2
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 5278 times.
5304 if(!p_mgetl(&section_id_read,f,true))
497 {
498 26 return false;
499 }
500 }
501
502 return false;
503 26 }
504
505
506
507
508
509 26 bool valid_zqt(PACKFILE *f)
510 {
511
512 //word tiles_used;
513 //word combos_used;
514 //open the file
515 //PACKFILE *f = pack_fopen(path, F_READ_PACKED);
516
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 26 times.
26 if(!f)
517 return false;
518
519 //for now, everything else is valid
520 26 return true;
521
522 /*int16_t version;
523 byte build;
524
525 //read the version and make sure it worked
526 if(!p_igetw(&version,f,true))
527 {
528 goto error;
529 }
530
531 //read the build and make sure it worked
532 if(!p_getc(&build,f,true))
533 goto error;
534
535 //read the tile info and make sure it worked
536 if(!p_igetw(&tiles_used,f,true))
537 {
538 goto error;
539 }
540
541 for (int32_t i=0; i<tiles_used; i++)
542 {
543 if(!pfread(trashbuf,tilesize(tf4Bit),f,true))
544 {
545 goto error;
546 }
547 }
548
549 //read the combo info and make sure it worked
550 if(!p_igetw(&combos_used,f,true))
551 {
552 goto error;
553 }
554 for (int32_t i=0; i<combos_used; i++)
555 {
556 if(!pfread(trashbuf,sizeof(newcombo),f,true))
557 {
558 goto error;
559 }
560 }
561
562 //read the palette info and make sure it worked
563 for (int32_t i=0; i<48; i++)
564 {
565 if(!pfread(trashbuf,newpdTOTAL,f,true))
566 {
567 goto error;
568 }
569 }
570 if(!pfread(trashbuf,sizeof(palcycle)*256*3,f,true))
571 {
572 goto error;
573 }
574 for (int32_t i=0; i<MAXLEVELS; i++)
575 {
576 if(!pfread(trashbuf,PALNAMESIZE,f,true))
577 {
578 goto error;
579 }
580 }
581
582 //read the sprite info and make sure it worked
583 for (int32_t i=0; i<MAXITEMS; i++)
584 {
585 if(!pfread(trashbuf,sizeof(itemdata),f,true))
586 {
587 goto error;
588 }
589 }
590
591 for (int32_t i=0; i<MAXWPNS; i++)
592 {
593 if(!pfread(trashbuf,sizeof(wpndata),f,true))
594 {
595 goto error;
596 }
597 }
598
599 //read the triforce pieces info and make sure it worked
600 for (int32_t i=0; i<8; ++i)
601 {
602 if(!p_getc(&trashbuf,f,true))
603 {
604 goto error;
605 }
606 }
607
608
609
610 //read the game icons info and make sure it worked
611 for (int32_t i=0; i<4; ++i)
612 {
613 if(!p_igetw(&trashbuf,f,true))
614 {
615 goto error;
616 }
617 }
618
619 //read the misc colors info and map styles info and make sure it worked
620 if(!pfread(trashbuf,sizeof(zcolors),f,true))
621 {
622 goto error;
623 }
624
625 //read the template screens and make sure it worked
626 byte num_maps;
627 if(!p_getc(&num_maps,f,true))
628 {
629 goto error;
630 }
631 for (int32_t i=0; i<TEMPLATES; i++)
632 {
633 if(!pfread(trashbuf,sizeof(mapscr),f,true))
634 {
635 goto error;
636 }
637 }
638 if (num_maps>1) //dungeon templates
639 {
640 for (int32_t i=0; i<TEMPLATES; i++)
641 {
642 if(!pfread(trashbuf,sizeof(mapscr),f,true))
643 {
644 goto error;
645 }
646 }
647 }
648
649 //yay! it worked! close the file and say everything was ok.
650 pack_fclose(f);
651 return true;
652
653 error:
654 pack_fclose(f);
655 return false;*/
656 26 }
657
658 bool valid_zqt(const char *filename)
659 {
660 PACKFILE *f=NULL;
661 bool isvalid;
662 char deletefilename[1024];
663 deletefilename[0]=0;
664 int32_t error;
665 f=open_quest_file(&error, filename, deletefilename, true, true,false);
666
667 if(!f)
668 {
669 // setPackfilePassword(NULL);
670 return false;
671 }
672
673 isvalid=valid_zqt(f);
674
675 if(deletefilename[0])
676 {
677 delete_file(deletefilename);
678 }
679
680 // setPackfilePassword(NULL);
681 return isvalid;
682 }
683
684 119 PACKFILE *open_quest_file(int32_t *open_error, const char *filename, char *deletefilename, bool compressed,bool encrypted, bool show_progress)
685 {
686 char tmpfilename[L_tmpnam];
687 119 temp_name(tmpfilename);
688 char percent_done[30];
689 119 int32_t current_method=0;
690
691 PACKFILE *f;
692 119 const char *passwd= encrypted ? datapwd : "";
693
694 // oldquest flag is set when an unencrypted qst file is suspected.
695 119 bool oldquest = false;
696 int32_t ret;
697
698
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(show_progress)
699 {
700 box_start(1, "Loading Quest", lfont, font, true);
701 }
702
703 119 box_out("Loading Quest: ");
704 //if(strncasecmp(filename, "qst.dat", 7)!=0)
705 //int32_t qstdat_str_size = 0;
706 //for ( int32_t q = 0; q < 255; q++ ) //find the length of the string
707 //{
708 // if ( moduledata.datafiles[qst_dat][q] != 0 ) qstdat_str_size++;
709 // else break;
710 //}
711 //if(strncasecmp(filename, moduledata.datafiles[qst_dat], 7)!=0)
712 119 al_trace("Trying to do strncasecmp() when loading a quest\n");
713 119 int32_t qstdat_filename_size = strlen(moduledata.datafiles[qst_dat]);
714 119 al_trace("Filename size of qst.dat file %s is %d.\n", moduledata.datafiles[qst_dat], qstdat_filename_size);
715 //if(strncasecmp(filename, moduledata.datafiles[qst_dat], qstdat_filename_size)!=0)
716
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(strcmp(filename, moduledata.datafiles[qst_dat])!=0)
717 {
718 119 box_out(filename);
719 119 }
720 else
721 {
722 box_out("new quest"); // Or whatever
723 }
724 119 box_out("...");
725 119 box_eol();
726 119 box_eol();
727
728
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(encrypted)
729 {
730 119 box_out("Decrypting...");
731 119 box_save_x();
732 119 ret = decode_file_007(filename, tmpfilename, ENC_STR, ENC_METHOD_MAX-1, strstr(filename, ".dat#")!=NULL, passwd);
733
734
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(ret)
735 {
736 switch(ret)
737 {
738 case 1:
739 box_out("error.");
740 box_eol();
741 box_end(true);
742 *open_error=qe_notfound;
743 return NULL;
744
745 case 2:
746 box_out("error.");
747 box_eol();
748 box_end(true);
749 *open_error=qe_internal;
750 return NULL;
751 // be sure not to delete tmpfilename now...
752 }
753
754 if(ret==5) //old encryption?
755 {
756 current_method++;
757 sprintf(percent_done, "%d%%", (current_method*100)/ENC_METHOD_MAX);
758 box_out(percent_done);
759 box_load_x();
760 ret = decode_file_007(filename, tmpfilename, ENC_STR, ENC_METHOD_211B9, strstr(filename, ".dat#")!=NULL, passwd);
761 }
762
763 if(ret==5) //old encryption?
764 {
765 current_method++;
766 sprintf(percent_done, "%d%%", (current_method*100)/ENC_METHOD_MAX);
767 box_out(percent_done);
768 box_load_x();
769 ret = decode_file_007(filename, tmpfilename, ENC_STR, ENC_METHOD_192B185, strstr(filename, ".dat#")!=NULL, passwd);
770 }
771
772 if(ret==5) //old encryption?
773 {
774 current_method++;
775 sprintf(percent_done, "%d%%", (current_method*100)/ENC_METHOD_MAX);
776 box_out(percent_done);
777 box_load_x();
778 ret = decode_file_007(filename, tmpfilename, ENC_STR, ENC_METHOD_192B105, strstr(filename, ".dat#")!=NULL, passwd);
779 }
780
781 if(ret==5) //old encryption?
782 {
783 current_method++;
784 sprintf(percent_done, "%d%%", (current_method*100)/ENC_METHOD_MAX);
785 box_out(percent_done);
786 box_load_x();
787 ret = decode_file_007(filename, tmpfilename, ENC_STR, ENC_METHOD_192B104, strstr(filename, ".dat#")!=NULL, passwd);
788 }
789
790 if(ret)
791 {
792 oldquest = true;
793 passwd="";
794 }
795 }
796
797 119 box_out("okay.");
798 119 box_eol();
799 119 }
800 else
801 {
802 oldquest = true;
803 }
804
805 119 box_out("Opening...");
806
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 119 times.
119 f = pack_fopen_password(oldquest ? filename : tmpfilename, compressed ? F_READ_PACKED : F_READ, passwd);
807
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!f)
808 {
809 if((compressed==1)&&(errno==EDOM))
810 {
811 f = pack_fopen_password(oldquest ? filename : tmpfilename, F_READ, passwd);
812 }
813
814 if(!f)
815 {
816 if(!oldquest)
817 {
818 delete_file(tmpfilename);
819 }
820 box_out("error.");
821 box_eol();
822 box_end(true);
823 *open_error=qe_invalid;
824 return NULL;
825 }
826 }
827
828
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 119 times.
119 if(!oldquest)
829 {
830
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 119 times.
119 if(deletefilename)
831 119 sprintf(deletefilename, "%s", tmpfilename);
832 119 }
833
834 119 box_out("okay.");
835 119 box_eol();
836
837 119 return f;
838 119 }
839
840 26 PACKFILE *open_quest_template(zquestheader *Header, char *deletefilename, bool validate)
841 {
842 char *filename;
843 26 PACKFILE *f=NULL;
844 26 int32_t open_error=0;
845 26 deletefilename[0]=0;
846
847 26 strcpy(qstdat_string,moduledata.datafiles[qst_dat]);
848 26 strcat(qstdat_string,"#NESQST_NEW_QST");
849
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 26 times.
26 if(Header->templatepath[0]==0)
850 {
851 26 filename=(char *)malloc(2048);
852 //strcpy(filename, "qst.dat#NESQST_NEW_QST");
853 26 strcpy(filename, qstdat_string);
854 26 }
855 else
856 {
857 filename=Header->templatepath;
858 }
859
860 26 f=open_quest_file(&open_error, filename, deletefilename, true, true,false);
861
862
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 26 times.
26 if(Header->templatepath[0]==0)
863 {
864 26 free(filename);
865 26 }
866
867
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 if(!f)
868 {
869 return NULL;
870 }
871
872
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 26 times.
26 if(validate)
873 {
874
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 if(!valid_zqt(f))
875 {
876 jwin_alert("Error","Invalid Quest Template",NULL,NULL,"O&K",NULL,'k',0,lfont);
877 pack_fclose(f);
878
879 //setPackfilePassword(NULL);
880 if(deletefilename[0])
881 {
882 delete_file(deletefilename);
883 }
884
885 return NULL;
886 }
887 26 }
888
889 26 return f;
890 26 }
891
892 26 bool init_section(zquestheader *Header, int32_t section_id, miscQdata *Misc, zctune *tunes, bool validate)
893 {
894 26 combosread=false;
895 26 mapsread=false;
896 26 fixffcs=false;
897
898
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 switch(section_id)
899 {
900 case ID_RULES:
901 case ID_STRINGS:
902 case ID_MISC:
903 case ID_TILES:
904 case ID_COMBOS:
905 case ID_CSETS:
906 case ID_MAPS:
907 case ID_DMAPS:
908 case ID_DOORS:
909 case ID_ITEMS:
910 case ID_WEAPONS:
911 case ID_COLORS:
912 case ID_ICONS:
913 case ID_INITDATA:
914 case ID_GUYS:
915 case ID_MIDIS:
916 case ID_CHEATS:
917 case ID_ITEMDROPSETS:
918 case ID_FAVORITES:
919 26 break;
920
921 default:
922 return false;
923 break;
924 }
925
926 int32_t ret;
927 word version, build;
928 26 PACKFILE *f=NULL;
929
930 char deletefilename[1024];
931 26 deletefilename[0]=0;
932
933 //why is this here?
934 /*
935 if(colordata==NULL)
936 return false;
937 */
938
939 //setPackfilePassword(datapwd);
940 26 f=open_quest_template(Header, deletefilename, validate);
941
942
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 26 times.
26 if(!f) //no file, nothing to delete
943 {
944 // setPackfilePassword(NULL);
945 return false;
946 }
947
948 26 ret=get_version_and_build(f, &version, &build);
949
950
2/4
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 26 times.
26 if(ret||(version==0))
951 {
952 pack_fclose(f);
953
954 if(deletefilename[0])
955 {
956 delete_file(deletefilename);
957 }
958
959 // setPackfilePassword(NULL);
960 return false;
961 }
962
963
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 26 times.
26 if(!find_section(f, section_id))
964 {
965 26 al_trace("Can't find section!\n");
966 26 pack_fclose(f);
967
968
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 26 times.
26 if(deletefilename[0])
969 {
970 26 delete_file(deletefilename);
971 26 }
972
973 //setPackfilePassword(NULL);
974 26 return false;
975 }
976
977 switch(section_id)
978 {
979 case ID_RULES:
980 //rules
981 ret=readrules(f, Header, true);
982 break;
983
984 case ID_STRINGS:
985 //strings
986 ret=readstrings(f, Header, true);
987 break;
988
989 case ID_MISC:
990 //misc data
991 ret=readmisc(f, Header, Misc, true);
992 break;
993
994 case ID_TILES:
995 //tiles
996 ret=readtiles(f, newtilebuf, Header, version, build, 0, NEWMAXTILES, true, true);
997 break;
998
999 case ID_COMBOS:
1000 //combos
1001 clear_combos();
1002 ret=readcombos(f, Header, version, build, 0, MAXCOMBOS, true);
1003 combosread=true;
1004 break;
1005
1006 case ID_COMBOALIASES:
1007 //combos
1008 ret=readcomboaliases(f, Header, version, build, true);
1009 break;
1010
1011 case ID_CSETS:
1012 //color data
1013 ret=readcolordata(f, Misc, version, build, 0, newerpdTOTAL, true);
1014 break;
1015
1016 case ID_MAPS:
1017 //maps
1018 ret=readmaps(f, Header, true);
1019 mapsread=true;
1020 break;
1021
1022 case ID_DMAPS:
1023 //dmaps
1024 ret=readdmaps(f, Header, version, build, 0, MAXDMAPS, true);
1025 break;
1026
1027 case ID_DOORS:
1028 //door combo sets
1029 ret=readdoorcombosets(f, Header, true);
1030 break;
1031
1032 case ID_ITEMS:
1033 //items
1034 ret=readitems(f, version, build, true);
1035 break;
1036
1037 case ID_WEAPONS:
1038 //weapons
1039 ret=readweapons(f, Header, true);
1040 break;
1041
1042 case ID_COLORS:
1043 //misc. colors
1044 ret=readmisccolors(f, Header, Misc, true);
1045 break;
1046
1047 case ID_ICONS:
1048 //game icons
1049 ret=readgameicons(f, Header, Misc, true);
1050 break;
1051
1052 case ID_INITDATA:
1053 //initialization data
1054 ret=readinitdata(f, Header, true);
1055 break;
1056
1057 case ID_GUYS:
1058 //guys
1059 ret=readguys(f, Header, true);
1060 break;
1061
1062 case ID_MIDIS:
1063 //midis
1064 ret=readtunes(f, Header, tunes, true);
1065 break;
1066
1067 case ID_CHEATS:
1068 //cheat codes
1069 ret=readcheatcodes(f, Header, true);
1070 break;
1071
1072 case ID_ITEMDROPSETS:
1073 //item drop sets
1074 // Why is this one commented out?
1075 //ret=readitemdropsets(f, (int32_t)version, (word)build, true);
1076 break;
1077
1078 case ID_FAVORITES:
1079 // favorite combos and aliases
1080 ret=readfavorites(f, version, build, true);
1081 break;
1082
1083 default:
1084 ret=-1;
1085 break;
1086 }
1087
1088 pack_fclose(f);
1089
1090 if(deletefilename[0])
1091 {
1092 delete_file(deletefilename);
1093 }
1094
1095 //setPackfilePassword(NULL);
1096 if(!ret)
1097 {
1098 return true;
1099 }
1100
1101 return false;
1102 26 }
1103
1104 bool init_tiles(bool validate, zquestheader *Header)
1105 {
1106 return init_section(Header, ID_TILES, NULL, NULL, validate);
1107 }
1108
1109 bool init_combos(bool validate, zquestheader *Header)
1110 {
1111 return init_section(Header, ID_COMBOS, NULL, NULL, validate);
1112 }
1113
1114 bool init_colordata(bool validate, zquestheader *Header, miscQdata *Misc)
1115 {
1116 return init_section(Header, ID_CSETS, Misc, NULL, validate);
1117 }
1118
1119 93 void init_spritelists()
1120 {
1121
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if(FFCore.quest_format[vZelda] < 0x255)
1122 {
1123 73 guys.setMax(255);
1124 73 items.setMax(255);
1125 73 Ewpns.setMax(255);
1126 73 Lwpns.setMax(255);
1127 73 Sitems.setMax(255);
1128 73 chainlinks.setMax(255);
1129 73 decorations.setMax(255);
1130 73 particles.setMax(255);
1131 73 }
1132 else
1133 {
1134 20 guys.setMax(255);
1135 20 items.setMax(255);
1136 20 Ewpns.setMax(255);
1137 20 Lwpns.setMax(255);
1138 20 Sitems.setMax(255);
1139 20 chainlinks.setMax(255);
1140 20 decorations.setMax(255);
1141 20 particles.setMax(255*((255*4)+1)); //255 per sprite that can use particles; guys, items, ewpns, lwpns, +HERO
1142 }
1143 93 }
1144
1145 26 bool reset_items(bool validate, zquestheader *Header)
1146 {
1147 26 bool ret = init_section(Header, ID_ITEMS, NULL, NULL, validate);
1148
1149 //Ignore this, but don't remove it
1150 /*
1151 if (ret)
1152 for(int32_t i=0; i<MAXITEMS; i++)
1153 {
1154 reset_itembuf(&itemsbuf[i], i);
1155 }
1156 */
1157
2/2
✓ Branch 0 taken 6656 times.
✓ Branch 1 taken 26 times.
6682 for(int32_t i=0; i<MAXITEMS; i++) reset_itemname(i);
1158
1159 26 return ret;
1160 }
1161
1162 bool reset_guys()
1163 {
1164 // The .dat file's guys definitions are always synchronised with defdata.cpp's - even the tile settings.
1165 init_guys(V_GUYS);
1166 return true;
1167 }
1168
1169 bool reset_wpns(bool validate, zquestheader *Header)
1170 {
1171 bool ret = init_section(Header, ID_WEAPONS, NULL, NULL, validate);
1172
1173 for(int32_t i=0; i<WPNCNT; i++)
1174 reset_weaponname(i);
1175
1176 return ret;
1177 }
1178
1179 bool reset_mapstyles(bool validate, miscQdata *Misc)
1180 {
1181 Misc->colors.blueframe_tile = 20044;
1182 Misc->colors.blueframe_cset = 0;
1183 Misc->colors.triforce_tile = 23461;
1184 Misc->colors.triforce_cset = 1;
1185 Misc->colors.triframe_tile = 18752;
1186 Misc->colors.triframe_cset = 1;
1187 Misc->colors.overworld_map_tile = 16990;
1188 Misc->colors.overworld_map_cset = 2;
1189 Misc->colors.HCpieces_tile = 21160;
1190 Misc->colors.HCpieces_cset = 8;
1191 Misc->colors.dungeon_map_tile = 19651;
1192 Misc->colors.dungeon_map_cset = 8;
1193 return true;
1194 }
1195
1196 bool reset_doorcombosets(bool validate, zquestheader *Header)
1197 {
1198 return init_section(Header, ID_DOORS, NULL, NULL, validate);
1199 }
1200
1201 26 int32_t get_qst_buffers()
1202 {
1203 26 memrequested+=(sizeof(mapscr)*MAPSCRS);
1204 26 Z_message("Allocating map buffer (%s)... ", byte_conversion2(sizeof(mapscr)*MAPSCRS,memrequested,-1, -1));
1205 26 TheMaps.resize(MAPSCRS);
1206
1207
2/2
✓ Branch 0 taken 3536 times.
✓ Branch 1 taken 26 times.
3562 for(int32_t i(0); i<MAPSCRS; i++)
1208 3536 TheMaps[i].zero_memory();
1209
1210 //memset(TheMaps, 0, sizeof(mapscr)*MAPSCRS); //shouldn't need this anymore
1211 26 Z_message("OK\n"); // Allocating map buffer...
1212
1213 26 memrequested+=(sizeof(zcmap)*MAXMAPS2);
1214 26 Z_message("Allocating combo buffer (%s)... ", byte_conversion2(sizeof(zcmap)*MAXMAPS2,memrequested,-1,-1));
1215
1216
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 if((ZCMaps=(zcmap*)malloc(sizeof(zcmap)*MAXMAPS2))==NULL)
1217 return 0;
1218
1219 26 Z_message("OK\n");
1220
1221 // Allocating space for all 65535 strings uses up 10.62MB...
1222 // The vast majority of finished quests (and I presume this will be consistent for all time) use < 1000 strings in total.
1223 // (Shoelace's "Hero of Dreams" uses 1415.)
1224 // So let's be a bit generous and allow 4096 initially.
1225 // In the rare event that a quest overshoots this mark, we'll reallocate to the full 65535 later.
1226 // I tested it and it worked without flaw on 6/6/11. - L.
1227 // 2022: bumped from 4096 to 8192 to avoid a bug where the Strings menu shows (None) strings when the list passes
1228 // this threshold. Possibly some bug related to `msglistcache` to being reset?
1229 // See https://discord.com/channels/876899628556091432/992984989073416242
1230 26 msg_strings_size = 8192;
1231 26 memrequested+=(sizeof(MsgStr)*msg_strings_size);
1232 26 Z_message("Allocating string buffer (%s)... ", byte_conversion2(sizeof(MsgStr)*msg_strings_size,memrequested,-1,-1));
1233
1234
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 26 times.
26 MsgStrings = new MsgStr[msg_strings_size];
1235
1236 //memset(MsgStrings, 0, sizeof(MsgStr)*msg_strings_size);
1237
2/2
✓ Branch 0 taken 212992 times.
✓ Branch 1 taken 26 times.
213018 for(auto q = 0; q < msg_strings_size; ++q)
1238 {
1239 212992 MsgStrings[q].clear();
1240 212992 }
1241 26 Z_message("OK\n"); // Allocating string buffer...
1242
1243 26 memrequested+=(sizeof(DoorComboSet)*MAXDOORCOMBOSETS);
1244 26 Z_message("Allocating door combo buffer (%s)... ", byte_conversion2(sizeof(DoorComboSet)*MAXDOORCOMBOSETS,memrequested,-1,-1));
1245
1246
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 if((DoorComboSets=(DoorComboSet*)malloc(sizeof(DoorComboSet)*MAXDOORCOMBOSETS))==NULL)
1247 return 0;
1248
1249 26 Z_message("OK\n"); // Allocating door combo buffer...
1250
1251 26 memrequested+=(sizeof(dmap)*MAXDMAPS);
1252 26 Z_message("Allocating dmap buffer (%s)... ", byte_conversion2(sizeof(dmap)*MAXDMAPS,memrequested,-1,-1));
1253
1254
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 if((DMaps=(dmap*)malloc(sizeof(dmap)*MAXDMAPS))==NULL)
1255 return 0;
1256
1257 26 memset(DMaps, 0, sizeof(dmap)*MAXDMAPS);
1258 26 Z_message("OK\n"); // Allocating dmap buffer...
1259
1260 26 memrequested+=(sizeof(newcombo)*MAXCOMBOS);
1261 26 Z_message("Allocating combo buffer (%s)... ", byte_conversion2(sizeof(newcombo)*MAXCOMBOS,memrequested,-1,-1));
1262
1263
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 if((combobuf=(newcombo*)malloc(sizeof(newcombo)*MAXCOMBOS))==NULL)
1264 return 0;
1265
1266 26 memset(combobuf, 0, sizeof(newcombo)*MAXCOMBOS);
1267 26 Z_message("OK\n"); // Allocating combo buffer...
1268
1269 26 memrequested+=(psTOTAL255);
1270 26 Z_message("Allocating color data buffer (%s)... ", byte_conversion2(psTOTAL255,memrequested,-1,-1));
1271
1272
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 if((colordata=(byte*)malloc(psTOTAL255))==NULL)
1273 return 0;
1274
1275 26 Z_message("OK\n"); // Allocating color data buffer...
1276
1277 26 memrequested+=(NEWMAXTILES*(sizeof(tiledata)+tilesize(tf4Bit)));
1278 26 Z_message("Allocating tile buffer (%s)... ", byte_conversion2(NEWMAXTILES*(sizeof(tiledata)+tilesize(tf4Bit)),memrequested,-1,-1));
1279
1280 26 free_newtilebuf();
1281
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 if((newtilebuf=(tiledata*)malloc(NEWMAXTILES*sizeof(tiledata)))==NULL)
1282 return 0;
1283
1284 26 memset(newtilebuf, 0, NEWMAXTILES*sizeof(tiledata));
1285 //Z_message("Performed memset on tiles\n");
1286 26 clear_tiles(newtilebuf);
1287 //Z_message("Performed clear_tiles()\n");
1288 26 Z_message("OK\n"); // Allocating tile buffer...
1289
1290
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 if(is_zquest())
1291 {
1292 memrequested+=(NEWMAXTILES*(sizeof(tiledata)+tilesize(tf4Bit)));
1293 Z_message("Allocating tile grab buffer (%s)... ", byte_conversion2(NEWMAXTILES*sizeof(tiledata),memrequested,-1,-1));
1294
1295 if((grabtilebuf=(tiledata*)malloc(NEWMAXTILES*sizeof(tiledata)))==NULL)
1296 return 0;
1297
1298 memset(grabtilebuf, 0, NEWMAXTILES*sizeof(tiledata));
1299 clear_tiles(grabtilebuf);
1300 Z_message("OK\n"); // Allocating tile grab buffer...
1301 }
1302
1303 26 memrequested+=(100000);
1304 26 Z_message("Allocating trash buffer (%s)... ", byte_conversion2(100000,memrequested,-1,-1));
1305
1306
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 if((trashbuf=(byte*)malloc(100000))==NULL)
1307 return 0;
1308
1309 26 Z_message("OK\n"); // Allocating trash buffer...
1310
1311 // Big, ugly band-aid here. Perhaps the most common cause of random crashes
1312 // has been inadvertently accessing itemsbuf[-1]. All such crashes should be
1313 // fixed by ensuring there's actually itemdata there.
1314 // If you change this, be sure to update del_qst_buffers, too.
1315
1316 26 memrequested+=(sizeof(itemdata)*(MAXITEMS+1));
1317 26 Z_message("Allocating item buffer (%s)... ", byte_conversion2(sizeof(itemdata)*(MAXITEMS+1),memrequested,-1,-1));
1318
1319
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 if((itemsbuf=(itemdata*)malloc(sizeof(itemdata)*(MAXITEMS+1)))==NULL)
1320 return 0;
1321
1322 26 memset(itemsbuf,0,sizeof(itemdata)*(MAXITEMS+1));
1323 26 itemsbuf++;
1324 26 Z_message("OK\n"); // Allocating item buffer...
1325
1326 26 memrequested+=(sizeof(wpndata)*MAXWPNS);
1327 26 Z_message("Allocating weapon buffer (%s)... ", byte_conversion2(sizeof(wpndata)*MAXWPNS,memrequested,-1,-1));
1328
1329
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 if((wpnsbuf=(wpndata*)malloc(sizeof(wpndata)*MAXWPNS))==NULL)
1330 return 0;
1331
1332 26 memset(wpnsbuf,0,sizeof(wpndata)*MAXWPNS);
1333 26 Z_message("OK\n"); // Allocating weapon buffer...
1334
1335 26 memrequested+=(sizeof(guydata)*MAXGUYS);
1336 26 Z_message("Allocating guy buffer (%s)... ", byte_conversion2(sizeof(guydata)*MAXGUYS,memrequested,-1,-1));
1337
1338
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 if((guysbuf=(guydata*)malloc(sizeof(guydata)*MAXGUYS))==NULL)
1339 return 0;
1340
1341 26 memset(guysbuf,0,sizeof(guydata)*MAXGUYS);
1342 26 Z_message("OK\n"); // Allocating guy buffer...
1343
1344 26 memrequested+=(sizeof(comboclass)*cMAX);
1345 26 Z_message("Allocating combo class buffer (%s)... ", byte_conversion2(sizeof(comboclass)*cMAX,memrequested,-1,-1));
1346
1347
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 26 times.
26 if((combo_class_buf=(comboclass*)malloc(sizeof(comboclass)*cMAX))==NULL)
1348 return 0;
1349
1350 26 Z_message("OK\n"); // Allocating combo class buffer...
1351
1352 26 return 1;
1353 26 }
1354
1355
1356 26 void free_newtilebuf()
1357 {
1358
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 26 times.
26 if(newtilebuf)
1359 {
1360 for(int32_t i=0; i<NEWMAXTILES; i++)
1361 if(newtilebuf[i].data)
1362 free(newtilebuf[i].data);
1363
1364 free(newtilebuf);
1365 newtilebuf = 0;
1366 }
1367 26 }
1368
1369 void free_grabtilebuf()
1370 {
1371 if(is_zquest())
1372 {
1373 if(grabtilebuf)
1374 {
1375 for(int32_t i=0; i<NEWMAXTILES; i++)
1376 if(grabtilebuf[i].data) free(grabtilebuf[i].data);
1377
1378 free(grabtilebuf);
1379 grabtilebuf = 0;
1380 }
1381 }
1382 }
1383
1384 void del_qst_buffers()
1385 {
1386 al_trace("Cleaning maps. \n");
1387
1388 if(ZCMaps) free(ZCMaps);
1389
1390 if(MsgStrings) delete[] MsgStrings;
1391
1392 if(DoorComboSets) free(DoorComboSets);
1393
1394 if(DMaps) free(DMaps);
1395
1396 if(combobuf) free(combobuf);
1397
1398 if(colordata) free(colordata);
1399
1400 al_trace("Cleaning tile buffers. \n");
1401 free_newtilebuf();
1402 free_grabtilebuf();
1403
1404 al_trace("Cleaning misc. \n");
1405
1406 if(trashbuf) free(trashbuf);
1407
1408 // See get_qst_buffers
1409 if(itemsbuf)
1410 {
1411 itemsbuf--;
1412 free(itemsbuf);
1413 }
1414
1415 if(wpnsbuf) free(wpnsbuf);
1416
1417 if(guysbuf) free(guysbuf);
1418
1419 if(combo_class_buf) free(combo_class_buf);
1420 }
1421
1422 bool init_palnames()
1423 {
1424 // if(palnames==NULL)
1425 // return false;
1426
1427 for(int32_t x=0; x<MAXLEVELS; x++)
1428 {
1429 switch(x)
1430 {
1431 case 0:
1432 sprintf(palnames[x],"Overworld");
1433 break;
1434
1435 case 10:
1436 sprintf(palnames[x],"Caves");
1437 break;
1438
1439 case 11:
1440 sprintf(palnames[x],"Passageways");
1441 break;
1442
1443 default:
1444 sprintf(palnames[x],"%c",0);
1445 break;
1446 }
1447 }
1448
1449 return true;
1450 }
1451
1452 17956 static void *read_block(PACKFILE *f, int32_t size, int32_t alloc_size, bool keepdata)
1453 {
1454 void *p;
1455
1456
1/2
✓ Branch 0 taken 17956 times.
✗ Branch 1 not taken.
17956 p = _AL_MALLOC(MAX(size, alloc_size));
1457
1458
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17956 times.
17956 if(!p)
1459 {
1460 return NULL;
1461 }
1462
1463
1/2
✓ Branch 0 taken 17956 times.
✗ Branch 1 not taken.
17956 if(!pfread(p,size,f,keepdata))
1464 {
1465 _AL_FREE(p);
1466 return NULL;
1467 }
1468
1469
1/2
✓ Branch 0 taken 17956 times.
✗ Branch 1 not taken.
17956 if(pack_ferror(f))
1470 {
1471 _AL_FREE(p);
1472 return NULL;
1473 }
1474
1475 17956 return p;
1476 17956 }
1477
1478 /* read_midi:
1479 * Reads MIDI data from a datafile (this is not the same thing as the
1480 * standard midi file format).
1481 */
1482
1483 1528 static MIDI *read_midi(PACKFILE *f, bool)
1484 {
1485 MIDI *m;
1486 int32_t c;
1487 1528 int16_t divisions=0;
1488 1528 int32_t len=0;
1489
1490 1528 m = (MIDI*)_AL_MALLOC(sizeof(MIDI));
1491
1492
1/2
✓ Branch 0 taken 1528 times.
✗ Branch 1 not taken.
1528 if(!m)
1493 {
1494 return NULL;
1495 }
1496
1497
2/2
✓ Branch 0 taken 48896 times.
✓ Branch 1 taken 1528 times.
50424 for(c=0; c<MIDI_TRACKS; c++)
1498 {
1499 48896 m->track[c].len = 0;
1500 48896 m->track[c].data = NULL;
1501 48896 }
1502
1503 1528 p_mgetw(&divisions,f,true);
1504 1528 m->divisions=divisions;
1505
1506
2/2
✓ Branch 0 taken 48896 times.
✓ Branch 1 taken 1528 times.
50424 for(c=0; c<MIDI_TRACKS; c++)
1507 {
1508 48896 p_mgetl(&len,f,true);
1509 48896 m->track[c].len=len;
1510
1511
2/2
✓ Branch 0 taken 30940 times.
✓ Branch 1 taken 17956 times.
48896 if(m->track[c].len > 0)
1512 {
1513 17956 m->track[c].data = (byte*)read_block(f, m->track[c].len, 0, true);
1514
1515
1/2
✓ Branch 0 taken 17956 times.
✗ Branch 1 not taken.
17956 if(!m->track[c].data)
1516 {
1517 destroy_midi(m);
1518 return NULL;
1519 }
1520 17956 }
1521 48896 }
1522
1523 LOCK_DATA(m, sizeof(MIDI));
1524
1525
2/2
✓ Branch 0 taken 48896 times.
✓ Branch 1 taken 1528 times.
50424 for(c=0; c<MIDI_TRACKS; c++)
1526 {
1527
2/2
✓ Branch 0 taken 17956 times.
✓ Branch 1 taken 30940 times.
48896 if(m->track[c].data)
1528 {
1529 LOCK_DATA(m->track[c].data, m->track[c].len);
1530 17956 }
1531 48896 }
1532
1533 1528 return m;
1534 1528 }
1535
1536 void clear_combo(int32_t i)
1537 {
1538 combobuf[i].clear();
1539 }
1540
1541 void clear_combos()
1542 {
1543 for(int32_t tmpcounter=0; tmpcounter<MAXCOMBOS; tmpcounter++)
1544 clear_combo(tmpcounter);
1545 }
1546
1547 void pack_combos()
1548 {
1549 int32_t di = 0;
1550
1551 for(int32_t si=0; si<1024; si+=2)
1552 combobuf[di++] = combobuf[si];
1553
1554 for(; di<1024; di++)
1555 clear_combo(di);
1556 }
1557
1558 93 void reset_tunes(zctune *tune)
1559 {
1560
2/2
✓ Branch 0 taken 23436 times.
✓ Branch 1 taken 93 times.
23529 for(int32_t i=0; i<MAXCUSTOMTUNES; i++)
1561 {
1562 23436 tune[i].reset();
1563 23436 }
1564 93 }
1565
1566
1567 /*void reset_midi(zcmidi_ *m)
1568 {
1569 m->title[0]=0;
1570 m->loop=1;
1571 m->volume=144;
1572 m->start=0;
1573 m->loop_start=-1;
1574 m->loop_end=-1;
1575 if(m->midi)
1576 {
1577 destroy_midi(m->midi);
1578 }
1579 m->midi=NULL;
1580 }
1581
1582
1583 void reset_midis(zcmidi_ *m)
1584 {
1585 for(int32_t i=0; i<MAXCUSTOMMIDIS; i++)
1586 {
1587 reset_midi(m+i);
1588 }
1589 }
1590 */
1591
1592 void reset_scr(int32_t scr)
1593 {
1594 /*
1595 byte *di=((byte*)TheMaps)+(scr*sizeof(mapscr));
1596 for(unsigned i=0; i<sizeof(mapscr); i++)
1597 *(di++) = 0;
1598 TheMaps[scr].valid=mVERSION;
1599 */
1600
1601 TheMaps[scr].zero_memory();
1602 //byte *di=((byte*)TheMaps)+(scr*sizeof(mapscr));
1603
1604 for(int32_t i=0; i<6; i++)
1605 {
1606 //these will be uncommented later
1607 //TheMaps[scr].layerxsize[i]=16;
1608 //TheMaps[scr].layerysize[i]=11;
1609 TheMaps[scr].layeropacity[i]=255;
1610 }
1611
1612 TheMaps[scr].valid=mVERSION;
1613
1614 }
1615
1616 /* For reference:
1617
1618 enum { qe_OK, qe_notfound, qe_invalid, qe_version, qe_obsolete,
1619 qe_missing, qe_internal, qe_pwd, qe_match, qe_minver };
1620 */
1621
1622 int32_t operator ==(DoorComboSet a, DoorComboSet b)
1623 {
1624 for(int32_t i=0; i<9; i++)
1625 {
1626 for(int32_t j=0; j<6; j++)
1627 {
1628 if(j<4)
1629 {
1630 if(a.doorcombo_u[i][j]!=b.doorcombo_u[i][j])
1631 {
1632 return false;
1633 }
1634
1635 if(a.doorcset_u[i][j]!=b.doorcset_u[i][j])
1636 {
1637 return false;
1638 }
1639
1640 if(a.doorcombo_d[i][j]!=b.doorcombo_d[i][j])
1641 {
1642 return false;
1643 }
1644
1645 if(a.doorcset_d[i][j]!=b.doorcset_d[i][j])
1646 {
1647 return false;
1648 }
1649 }
1650
1651 if(a.doorcombo_l[i][j]!=b.doorcombo_l[i][j])
1652 {
1653 return false;
1654 }
1655
1656 if(a.doorcset_l[i][j]!=b.doorcset_l[i][j])
1657 {
1658 return false;
1659 }
1660
1661 if(a.doorcombo_r[i][j]!=b.doorcombo_r[i][j])
1662 {
1663 return false;
1664 }
1665
1666 if(a.doorcset_r[i][j]!=b.doorcset_r[i][j])
1667 {
1668 return false;
1669 }
1670 }
1671
1672 if(i<2)
1673 {
1674 if(a.flags[i]!=b.flags[i])
1675 {
1676 return false;
1677 }
1678
1679 if(a.bombdoorcombo_u[i]!=b.bombdoorcombo_u[i])
1680 {
1681 return false;
1682 }
1683
1684 if(a.bombdoorcset_u[i]!=b.bombdoorcset_u[i])
1685 {
1686 return false;
1687 }
1688
1689 if(a.bombdoorcombo_d[i]!=b.bombdoorcombo_d[i])
1690 {
1691 return false;
1692 }
1693
1694 if(a.bombdoorcset_d[i]!=b.bombdoorcset_d[i])
1695 {
1696 return false;
1697 }
1698 }
1699
1700 if(i<3)
1701 {
1702 if(a.bombdoorcombo_l[i]!=b.bombdoorcombo_l[i])
1703 {
1704 return false;
1705 }
1706
1707 if(a.bombdoorcset_l[i]!=b.bombdoorcset_l[i])
1708 {
1709 return false;
1710 }
1711
1712 if(a.bombdoorcombo_r[i]!=b.bombdoorcombo_r[i])
1713 {
1714 return false;
1715 }
1716
1717 if(a.bombdoorcset_r[i]!=b.bombdoorcset_r[i])
1718 {
1719 return false;
1720 }
1721 }
1722
1723 if(a.walkthroughcombo[i]!=b.walkthroughcombo[i])
1724 {
1725 return false;
1726 }
1727
1728 if(a.walkthroughcset[i]!=b.walkthroughcset[i])
1729 {
1730 return false;
1731 }
1732 }
1733
1734 return true;
1735 }
1736
1737 int32_t doortranslations_u[9][4]=
1738 {
1739 {37,38,53,54},
1740 {37,38,39,40},
1741 {37,38,55,56},
1742 {37,38,39,40},
1743 {37,38,53,54},
1744 {37,38,53,54},
1745 {37,38,53,54},
1746 {7,8,23,24},
1747 {7,8,41,42}
1748 };
1749
1750 int32_t doortranslations_d[9][4]=
1751 {
1752 {117,118,133,134},
1753 {135,136,133,134},
1754 {119,120,133,134},
1755 {135,136,133,134},
1756 {117,118,133,134},
1757 {117,118,133,134},
1758 {117,118,133,134},
1759 {151,152,167,168},
1760 {137,138,167,168},
1761 };
1762
1763 //enum {dt_pass=0, dt_lock, dt_shut, dt_boss, dt_olck, dt_osht, dt_obos, dt_wall, dt_bomb, dt_walk, dt_max};
1764 int32_t doortranslations_l[9][6]=
1765 {
1766 {66,67,82,83,98,99},
1767 {66,68,82,84,98,100},
1768 {66,69,82,85,98,101},
1769 {66,68,82,84,98,100},
1770 {66,67,82,83,98,99},
1771 {66,67,82,83,98,99},
1772 {66,67,82,83,98,99},
1773 {64,65,80,81,96,97},
1774 {64,65,80,114,96,97},
1775 };
1776
1777 int32_t doortranslations_r[9][6]=
1778 {
1779
1780 {76,77,92,93,108,109},
1781 {75,77,91,93,107,109},
1782 {74,77,90,93,106,109},
1783 {75,77,91,93,107,109},
1784 {76,77,92,93,108,109},
1785 {76,77,92,93,108,109},
1786 {76,77,92,93,108,109},
1787 {78,79,94,95,110,111},
1788 {78,79,125,95,110,111},
1789 };
1790
1791 int32_t tdcmbdat(int32_t map, int32_t scr, int32_t pos)
1792 {
1793 return (TheMaps[map*MAPSCRS+TEMPLATE].data[pos]&0xFF)+((TheMaps[map*MAPSCRS+scr].old_cpage)<<8);
1794 }
1795
1796 int32_t tdcmbcset(int32_t map, int32_t scr, int32_t pos)
1797 {
1798 //these are here to bypass compiler warnings about unused arguments
1799 map=map;
1800 scr=scr;
1801 pos=pos;
1802
1803 //what does this function do?
1804 // return TheMaps[map*MAPSCRS+TEMPLATE].cset[pos];
1805 return 2;
1806 }
1807
1808 int32_t MakeDoors(int32_t map, int32_t scr)
1809 {
1810 if(!(TheMaps[map*MAPSCRS+scr].valid&mVALID))
1811 {
1812 return 0;
1813 }
1814
1815 DoorComboSet tempdcs;
1816 memset(&tempdcs, 0, sizeof(DoorComboSet));
1817
1818 //up
1819 for(int32_t i=0; i<9; i++)
1820 {
1821 for(int32_t j=0; j<4; j++)
1822 {
1823 tempdcs.doorcombo_u[i][j]=tdcmbdat(map,scr,doortranslations_u[i][j]);
1824 tempdcs.doorcset_u[i][j]=tdcmbcset(map,scr,doortranslations_u[i][j]);
1825 }
1826 }
1827
1828 tempdcs.bombdoorcombo_u[0]=tdcmbdat(map,scr,57);
1829 tempdcs.bombdoorcset_u[0]=tdcmbcset(map,scr,57);
1830 tempdcs.bombdoorcombo_u[1]=tdcmbdat(map,scr,58);
1831 tempdcs.bombdoorcset_u[1]=tdcmbcset(map,scr,58);
1832 tempdcs.walkthroughcombo[0]=tdcmbdat(map,scr,34);
1833 tempdcs.walkthroughcset[0]=tdcmbdat(map,scr,34);
1834
1835 //down
1836 for(int32_t i=0; i<9; i++)
1837 {
1838 for(int32_t j=0; j<4; j++)
1839 {
1840 tempdcs.doorcombo_d[i][j]=tdcmbdat(map,scr,doortranslations_d[i][j]);
1841 tempdcs.doorcset_d[i][j]=tdcmbcset(map,scr,doortranslations_d[i][j]);
1842 }
1843 }
1844
1845 tempdcs.bombdoorcombo_d[0]=tdcmbdat(map,scr,121);
1846
1847 tempdcs.bombdoorcset_d[0]=tdcmbcset(map,scr,121);
1848 tempdcs.bombdoorcombo_d[1]=tdcmbdat(map,scr,122);
1849 tempdcs.bombdoorcset_d[1]=tdcmbcset(map,scr,122);
1850 tempdcs.walkthroughcombo[1]=tdcmbdat(map,scr,34);
1851 tempdcs.walkthroughcset[1]=tdcmbdat(map,scr,34);
1852
1853 //left
1854 // TheMaps[i*MAPSCRS+j].warpdmap=TheOldMap.warpdmap;
1855 for(int32_t i=0; i<9; i++)
1856 {
1857 for(int32_t j=0; j<6; j++)
1858 {
1859 tempdcs.doorcombo_l[i][j]=tdcmbdat(map,scr,doortranslations_l[i][j]);
1860 tempdcs.doorcset_l[i][j]=tdcmbcset(map,scr,doortranslations_l[i][j]);
1861 }
1862 }
1863
1864 for(int32_t j=0; j>6; j++)
1865 {
1866 if((j!=2)&&(j!=3))
1867 {
1868 tempdcs.doorcombo_l[dt_bomb][j]=TheMaps[map*MAPSCRS+scr].data[doortranslations_l[dt_bomb][j]];
1869 tempdcs.doorcset_l[dt_bomb][j]=TheMaps[map*MAPSCRS+scr].cset[doortranslations_l[dt_bomb][j]];
1870 }
1871 }
1872
1873 tempdcs.bombdoorcombo_l[0]=0;
1874 tempdcs.bombdoorcset_l[0]=tdcmbcset(map,scr,115);
1875 tempdcs.bombdoorcombo_l[1]=tdcmbdat(map,scr,115);
1876 tempdcs.bombdoorcset_l[1]=tdcmbcset(map,scr,115);
1877 tempdcs.bombdoorcombo_l[2]=0;
1878 tempdcs.bombdoorcset_l[2]=tdcmbcset(map,scr,115);
1879 tempdcs.walkthroughcombo[2]=tdcmbdat(map,scr,34);
1880 tempdcs.walkthroughcset[2]=tdcmbdat(map,scr,34);
1881
1882 //right
1883 for(int32_t i=0; i<9; i++)
1884 {
1885 for(int32_t j=0; j<6; j++)
1886 {
1887 tempdcs.doorcombo_r[i][j]=tdcmbdat(map,scr,doortranslations_r[i][j]);
1888 tempdcs.doorcset_r[i][j]=tdcmbcset(map,scr,doortranslations_r[i][j]);
1889 }
1890 }
1891
1892 for(int32_t j=0; j>6; j++)
1893 {
1894 if((j!=2)&&(j!=3))
1895 {
1896 tempdcs.doorcombo_r[dt_bomb][j]=TheMaps[map*MAPSCRS+scr].data[doortranslations_r[dt_bomb][j]];
1897 tempdcs.doorcset_r[dt_bomb][j]=TheMaps[map*MAPSCRS+scr].cset[doortranslations_r[dt_bomb][j]];
1898 }
1899 }
1900
1901 tempdcs.bombdoorcombo_r[0]=0;
1902 tempdcs.bombdoorcset_r[0]=tdcmbcset(map,scr,124);
1903 tempdcs.bombdoorcombo_r[1]=tdcmbdat(map,scr,124);
1904 tempdcs.bombdoorcset_r[1]=tdcmbcset(map,scr,124);
1905 tempdcs.bombdoorcombo_r[2]=0;
1906 tempdcs.bombdoorcset_r[2]=tdcmbcset(map,scr,124);
1907 tempdcs.walkthroughcombo[3]=tdcmbdat(map,scr,34);
1908 tempdcs.walkthroughcset[3]=tdcmbdat(map,scr,34);
1909
1910 int32_t k;
1911
1912 for(k=0; k<door_combo_set_count; k++)
1913 {
1914 if(DoorComboSets[k]==tempdcs)
1915 {
1916 break;
1917 }
1918 }
1919
1920 if(k==door_combo_set_count)
1921 {
1922 DoorComboSets[k]=tempdcs;
1923 sprintf(DoorComboSets[k].name, "Door Combo Set %d", k);
1924 ++door_combo_set_count;
1925 }
1926
1927 return k;
1928 /*
1929 doorcombo_u[9][4];
1930 doorcset_u[9][4];
1931 doorcombo_d[9][4];
1932 doorcset_d[9][4];
1933 doorcombo_l[9][6];
1934 doorcset_l[9][6];
1935 doorcombo_r[9][6];
1936 doorcset_r[9][6];
1937 bombdoorcombo_u[2];
1938 bombdoorcset_u[2];
1939 bombdoorcombo_d[2];
1940 bombdoorcset_d[2];
1941 bombdoorcombo_l[3];
1942 bombdoorcset_l[3];
1943 bombdoorcombo_r[3];
1944 bombdoorcset_r[3];
1945 walkthroughcombo[4];
1946 walkthroughcset[4];
1947 */
1948 }
1949
1950 INLINE int32_t tcmbdat2(int32_t map, int32_t scr, int32_t pos)
1951 {
1952 return (TheMaps[map*MAPSCRS+TEMPLATE2].data[pos]&0xFF)+((TheMaps[map*MAPSCRS+scr].old_cpage)<<8);
1953 }
1954
1955 INLINE int32_t tcmbcset2(int32_t map, int32_t pos)
1956 {
1957
1958 return TheMaps[map*MAPSCRS+TEMPLATE2].cset[pos];
1959 }
1960
1961 INLINE int32_t tcmbflag2(int32_t map, int32_t pos)
1962 {
1963 return TheMaps[map*MAPSCRS+TEMPLATE2].sflag[pos];
1964 }
1965
1966
1967 void get_questpwd(char *encrypted_pwd, int16_t pwdkey, char *pwd)
1968 {
1969 char temp_pwd[30];
1970 memset(temp_pwd,0,30);
1971
1972 if(pwdkey!=0)
1973 {
1974 memcpy(temp_pwd,encrypted_pwd,30);
1975 temp_pwd[29]=0;
1976
1977 for(int32_t i=0; i<30; i++)
1978 {
1979 temp_pwd[i] -= pwdkey;
1980 int32_t t=pwdkey>>15;
1981 pwdkey = (pwdkey<<1)+t;
1982 }
1983 }
1984
1985 memcpy(pwd,temp_pwd,30);
1986 }
1987
1988
1989
1990 bool check_questpwd(zquestheader *Header, char *pwd)
1991 {
1992 #if DEVLEVEL > 3
1993 return true;
1994 #endif
1995
1996 if ( (!strcmp(pwd, (char*)clavio)) ) return true;
1997 cvs_MD5Context ctx;
1998 uint8_t md5sum[16];
1999
2000 cvs_MD5Init(&ctx);
2001 cvs_MD5Update(&ctx, (const uint8_t*)pwd, (unsigned)strlen(pwd));
2002 cvs_MD5Final(md5sum, &ctx);
2003
2004 return (memcmp(Header->pwd_hash,md5sum,16)==0);
2005
2006 }
2007
2008 89 void print_quest_metadata(zquestheader const& tempheader, char const* path, byte qst_num)
2009 {
2010 89 zprint2("\n");
2011 89 zprint2("[ZQUEST CREATOR METADATA]\n");
2012
1/2
✓ Branch 0 taken 89 times.
✗ Branch 1 not taken.
89 if(qst_num < moduledata.max_quest_files)
2013 zprint2("Loading module quest %d\n", qst_num+1);
2014
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 89 times.
89 if(path) zprint2("Loading '%s'\n", path);
2015
1/2
✓ Branch 0 taken 89 times.
✗ Branch 1 not taken.
89 if ( tempheader.new_version_id_main > 0 )
2016 {
2017
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 89 times.
89 if(tempheader.new_version_id_fourth > 0)
2018 zprint2("Last saved in ZQuest Version %d.%d.%d.%d ",
2019 tempheader.new_version_id_main,tempheader.new_version_id_second,
2020 tempheader.new_version_id_third,tempheader.new_version_id_fourth);
2021 89 else zprint2("Last saved in ZQuest Version: %d.%d.%d ",
2022 89 tempheader.new_version_id_main,tempheader.new_version_id_second,
2023 89 tempheader.new_version_id_third);
2024 89 }
2025 else
2026 {
2027 switch ( tempheader.zelda_version )
2028 {
2029 case 0x255:
2030 {
2031 zprint2("Last saved in ZQuest Version: 2.55.0, %s: %d", tempheader.getAlphaStr(), tempheader.getAlphaVer());
2032 break;
2033 }
2034 case 0x254:
2035 {
2036 zprint2("Last saved in ZQuest Version: 2.54.0, Alpha Build ID: %d", tempheader.build);
2037 break;
2038 }
2039 case 0x250:
2040 {
2041 switch(tempheader.build)
2042 {
2043 case 19:
2044 zprint2("Last saved in ZQuest Version: 2.50.0, Gamma 1"); break;
2045 case 20:
2046 zprint2("Last saved in ZQuest Version: 2.50.0, Gamma 2"); break;
2047 case 21:
2048 zprint2("Last saved in ZQuest Version: 2.50.0, Gamma 3"); break;
2049 case 22:
2050 zprint2("Last saved in ZQuest Version: 2.50.0, Gamma 4"); break;
2051 case 23:
2052 zprint2("Last saved in ZQuest Version: 2.50.0, Gamma 5"); break;
2053 case 24:
2054 zprint2("Last saved in ZQuest Version: 2.50.0, Release"); break;
2055 case 25:
2056 zprint2("Last saved in ZQuest Version: 2.50.1, Gamma 1"); break;
2057 case 26:
2058 zprint2("Last saved in ZQuest Version: 2.50.1, Gamma 2"); break;
2059 case 27:
2060 zprint2("Last saved in ZQuest Version: 2.50.1, Gamma 3"); break;
2061 case 28:
2062 zprint2("Last saved in ZQuest Version: 2.50.1, Release"); break;
2063 case 29:
2064 zprint2("Last saved in ZQuest Version: 2.50.2, Release"); break;
2065 case 30:
2066 zprint2("Last saved in ZQuest Version: 2.50.3, Gamma 1"); break;
2067 case 31:
2068 zprint2("Last saved in ZQuest Version: 2.53.0, Prior to Gamma 3"); break;
2069 case 32:
2070 zprint2("Last saved in ZQuest Version: 2.53.0"); break;
2071 case 33:
2072 zprint2("Last saved in ZQuest Version: 2.53.1"); break;
2073 default:
2074 zprint2("Last saved in ZQuest Version: %x, Build %d", tempheader.zelda_version,tempheader.build); break;
2075
2076 }
2077 break;
2078 }
2079
2080 case 0x211:
2081 {
2082 zprint2("Last saved in ZQuest Version: 2.11, Beta %d", tempheader.build); break;
2083 }
2084 case 0x210:
2085 {
2086 zprint2("Last saved in ZQuest Version: 2.10.x");
2087 if ( tempheader.build ) zprint2("Beta/Build %d\n", tempheader.build);
2088 break;
2089 }
2090 /* These versions cannot be handled here; they will be incorrect at this time. -Z
2091 case 0x193:
2092 {
2093 zprint2("Last saved in ZQuest Version: 1.93, Beta %d\n", tempheader.build); break;
2094 }
2095 case 0x192:
2096 {
2097 zprint2("Last saved in ZQuest Version: 1.92, Beta %d\n", tempheader.build); break;
2098 }
2099 case 0x190:
2100 {
2101 zprint2("Last saved in ZQuest Version: 1.90, Beta/Build %d\n", tempheader.build); break;
2102 }
2103 case 0x184:
2104 {
2105 zprint2("Last saved in ZQuest Version: 1.84, Beta/Build %d\n", tempheader.build); break;
2106 }
2107 case 0x183:
2108 {
2109 zprint2("Last saved in ZQuest Version: 1.83, Beta/Build %d\n", tempheader.build); break;
2110 }
2111 case 0x180:
2112 {
2113 zprint2("Last saved in ZQuest Version: 1.80, Beta/Build %d\n", tempheader.build); break;
2114 }
2115 default:
2116 {
2117 zprint2("Last saved in ZQuest Version: %x, Beta %d\n", tempheader.zelda_version,tempheader.build); break;
2118 }
2119 */
2120 }
2121 }
2122
3/4
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 73 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 16 times.
89 if(!tempheader.is_legacy() && tempheader.getAlphaVer())
2123 16 zprint2("%s\n", tempheader.getAlphaVerStr());
2124 73 else zprint2("\n");
2125
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 16 times.
89 if ( tempheader.made_in_module_name[0] ) zprint2("Created with ZC Module: %s\n\n", tempheader.made_in_module_name);
2126
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 16 times.
89 if ( tempheader.new_version_devsig[0] ) zprint2("Developr Signoff by: %s\n", tempheader.new_version_devsig);
2127
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 16 times.
89 if ( tempheader.new_version_compilername[0] ) zprint2("Compiled with: %s, (ID: %d)\n", tempheader.new_version_compilername, tempheader.compilerid);
2128
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 16 times.
89 if ( tempheader.new_version_compilerversion[0] ) zprint2("Compiler Version: %s, (%d,%d,%d,%d)\n", tempheader.new_version_compilerversion,tempheader.compilerversionnumber_first,tempheader.compilerversionnumber_second,tempheader.compilerversionnumber_third,tempheader.compilerversionnumber_fourth);
2129
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 89 times.
89 if ( tempheader.product_name[0] ) zprint2("Project ID: %s\n", tempheader.product_name);
2130
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 16 times.
89 if ( tempheader.new_version_id_date_day ) zprint2("Editor Built at date and time: %d-%d-%d at @ %s %s\n", tempheader.new_version_id_date_day, tempheader.new_version_id_date_month, tempheader.new_version_id_date_year, tempheader.build_timestamp, tempheader.build_timezone);
2131 89 zprint2("\n");
2132 89 }
2133
2134 119 int32_t readheader(PACKFILE *f, zquestheader *Header, bool keepdata, byte printmetadata)
2135 {
2136 int32_t dummy;
2137 zquestheader tempheader;
2138 119 memcpy(&tempheader, Header, sizeof(tempheader));
2139 char dummybuf[80];
2140 byte temp_map_count;
2141 byte temp_midi_flags[MIDIFLAGS_SIZE];
2142 word version;
2143 char temp_pwd[30], temp_pwd2[30];
2144 int16_t temp_pwdkey;
2145 cvs_MD5Context ctx;
2146 119 memset(temp_midi_flags, 0, MIDIFLAGS_SIZE);
2147 119 memset(&tempheader, 0, sizeof(tempheader));
2148 119 memset(FFCore.quest_format, 0, sizeof(FFCore.quest_format));
2149
2150
2151
2152
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 119 times.
119 if(!pfread(tempheader.id_str,sizeof(tempheader.id_str),f,true)) // first read old header
2153 {
2154 Z_message("Unable to read header string\n");
2155 return qe_invalid;
2156 }
2157
2158 // check header
2159
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(strcmp(tempheader.id_str,QH_NEWIDSTR))
2160 {
2161 if(strcmp(tempheader.id_str,QH_IDSTR))
2162 {
2163 Z_message("Invalid header string: '%s' (was expecting '%s' or '%s')\n", tempheader.id_str, QH_IDSTR, QH_NEWIDSTR);
2164 return qe_invalid;
2165 }
2166 }
2167
2168 119 int32_t templatepath_len=0;
2169
2170 119 tempheader.external_zinfo = false;
2171 119 read_zinfo = false;
2172
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!strcmp(tempheader.id_str,QH_IDSTR)) //pre-1.93 version
2173 {
2174 byte padding;
2175
2176 if(!p_getc(&padding,f,true))
2177 {
2178 return qe_invalid;
2179 }
2180
2181 if(!p_igetw(&tempheader.zelda_version,f,true))
2182 {
2183 return qe_invalid;
2184 }
2185
2186 FFCore.quest_format[vZelda] = tempheader.zelda_version;
2187
2188 if(tempheader.zelda_version > ZELDA_VERSION)
2189 {
2190 return qe_version;
2191 }
2192
2193 FFCore.quest_format[vZelda] = tempheader.zelda_version;
2194
2195 if(strcmp(tempheader.id_str,QH_IDSTR))
2196 {
2197 return qe_invalid;
2198 }
2199
2200 if(bad_version(tempheader.zelda_version))
2201 {
2202 return qe_obsolete;
2203 }
2204
2205 if(!p_igetw(&tempheader.internal,f,true))
2206 {
2207 return qe_invalid;
2208 }
2209
2210 if(!p_getc(&tempheader.quest_number,f,true))
2211 {
2212 return qe_invalid;
2213 }
2214
2215 FFCore.quest_format[qQuestNumber] = tempheader.quest_number;
2216
2217 if(!pfread(&quest_rules[0],2,f,true))
2218 {
2219 return qe_invalid;
2220 }
2221
2222 if(!p_getc(&temp_map_count,f,true))
2223 {
2224 return qe_invalid;
2225 }
2226
2227 FFCore.quest_format[qMapCount] = temp_map_count;
2228
2229 if(!p_getc(&tempheader.old_str_count,f,true))
2230 {
2231 return qe_invalid;
2232 }
2233
2234 if(!p_getc(&tempheader.data_flags[ZQ_TILES],f,true))
2235 {
2236 return qe_invalid;
2237 }
2238
2239 if(!pfread(temp_midi_flags,4,f,true))
2240 {
2241 return qe_invalid;
2242 }
2243
2244 if(!p_getc(&tempheader.data_flags[ZQ_CHEATS2],f,true))
2245 {
2246 return qe_invalid;
2247 }
2248
2249 if(!pfread(dummybuf,14,f,true))
2250 {
2251 return qe_invalid;
2252 }
2253
2254 if(!pfread(&quest_rules[2],2,f,true))
2255 {
2256 return qe_invalid;
2257 }
2258
2259 if(!p_getc(&dummybuf,f,true))
2260 {
2261 return qe_invalid;
2262 }
2263
2264 if(!pfread(tempheader.version,sizeof(tempheader.version),f,true))
2265 {
2266 return qe_invalid;
2267 }
2268
2269 if(!pfread(tempheader.title,sizeof(tempheader.title),f,true))
2270 {
2271 return qe_invalid;
2272 }
2273 // These fields are expected to end in null bytes!
2274 tempheader.title[sizeof(tempheader.title)-1] = 0;
2275
2276 if(!pfread(tempheader.author,sizeof(tempheader.author),f,true))
2277 {
2278 return qe_invalid;
2279 }
2280 tempheader.author[sizeof(tempheader.author)-1] = 0;
2281
2282 if(!p_getc(&padding,f,true))
2283 {
2284 return qe_invalid;
2285 }
2286
2287 if(!p_igetw(&temp_pwdkey,f,true))
2288 {
2289 return qe_invalid;
2290 }
2291
2292 if(!pfread(temp_pwd,30,f,true))
2293 {
2294 return qe_invalid;
2295 }
2296
2297 get_questpwd(temp_pwd, temp_pwdkey, temp_pwd2);
2298 cvs_MD5Init(&ctx);
2299 cvs_MD5Update(&ctx, (const uint8_t*)temp_pwd2, (unsigned)strlen(temp_pwd2));
2300 cvs_MD5Final(tempheader.pwd_hash, &ctx);
2301
2302 if(tempheader.zelda_version < 0x177) // lacks new header stuff...
2303 {
2304 //memset(tempheader.minver,0,20); // char minver[9], byte build, byte foo[10]
2305 // Not anymore...
2306 memset(tempheader.minver,0,9);
2307 tempheader.build=0;
2308 tempheader.use_keyfile=0;
2309 memset(tempheader.old_foo, 0, 9);
2310 }
2311 else
2312 {
2313 if(!pfread(tempheader.minver,sizeof(tempheader.minver),f,true))
2314 {
2315 return qe_invalid;
2316 }
2317
2318 if(!p_getc(&tempheader.build,f,true))
2319 {
2320 return qe_invalid;
2321 }
2322
2323 FFCore.quest_format[vBuild] = tempheader.build;
2324
2325 if(!p_getc(&tempheader.use_keyfile,f,true))
2326 {
2327 return qe_invalid;
2328 }
2329
2330 if(!pfread(dummybuf,9,f,true))
2331 {
2332 return qe_invalid;
2333 }
2334 } // starting at minver
2335
2336 if(tempheader.zelda_version < 0x187) // lacks newer header stuff...
2337 {
2338 memset(&quest_rules[4],0,16); // word rules3..rules10
2339 }
2340 else
2341 {
2342 if(!pfread(&quest_rules[4],16,f,true)) // read new header additions
2343 {
2344 return qe_invalid; // starting at rules3
2345 }
2346
2347 if(tempheader.zelda_version <= 0x190)
2348 {
2349 set_bit(quest_rules,qr_MEANPLACEDTRAPS,0);
2350 }
2351 }
2352
2353 if((tempheader.zelda_version < 0x192)||
2354 ((tempheader.zelda_version == 0x192)&&(tempheader.build<149)))
2355 {
2356 set_bit(quest_rules,qr_BRKNSHLDTILES,(get_bit(quest_rules,qr_BRKBLSHLDS_DEP)));
2357 set_bit(deprecated_rules,qr_BRKBLSHLDS_DEP,1);
2358 }
2359
2360 if(tempheader.zelda_version >= 0x192) // lacks newer header stuff...
2361 {
2362 byte *mf=temp_midi_flags;
2363
2364 if((tempheader.zelda_version == 0x192)&&(tempheader.build<178))
2365 {
2366 mf=(byte*)dummybuf;
2367 }
2368
2369 if(!pfread(mf,32,f,true)) // read new header additions
2370 {
2371 return qe_invalid; // starting at foo2
2372 }
2373
2374 if(!pfread(dummybuf,18,f,true)) // read new header additions
2375 {
2376 return qe_invalid; // starting at foo2
2377 }
2378 }
2379
2380 if((tempheader.zelda_version < 0x192)||
2381 ((tempheader.zelda_version == 0x192)&&(tempheader.build<145)))
2382 {
2383 memset(tempheader.templatepath,0,2048);
2384 }
2385 else
2386 {
2387 if(!pfread(tempheader.templatepath,280,f,true)) // read templatepath
2388 {
2389 return qe_invalid;
2390 }
2391 }
2392
2393 if((tempheader.zelda_version < 0x192)||
2394 ((tempheader.zelda_version == 0x192)&&(tempheader.build<186)))
2395 {
2396 tempheader.use_keyfile=0;
2397 }
2398 }
2399 else
2400 {
2401 //section id
2402
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 119 times.
119 if(!p_mgetl(&dummy,f,true))
2403 {
2404 return qe_invalid;
2405 }
2406
2407 //section version info
2408
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!p_igetw(&version,f,true))
2409 {
2410 return qe_invalid;
2411 }
2412
2413 119 FFCore.quest_format[vHeader] = version;
2414
2415
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!p_igetw(&dummy,f,true))
2416 {
2417 return qe_invalid;
2418 }
2419
2420 //section size
2421
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!p_igetl(&dummy,f,true))
2422 {
2423 return qe_invalid;
2424 }
2425
2426 //finally... section data
2427
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!p_igetw(&tempheader.zelda_version,f,true))
2428 {
2429 return qe_invalid;
2430 }
2431
2432 119 FFCore.quest_format[vZelda] = tempheader.zelda_version;
2433
2434 //do some quick checking...
2435
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 119 times.
119 if(tempheader.zelda_version > ZELDA_VERSION)
2436 {
2437 return qe_version;
2438 }
2439
2440
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 119 times.
119 if(strcmp(tempheader.id_str,QH_NEWIDSTR))
2441 {
2442 return qe_invalid;
2443 }
2444
2445
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 119 times.
119 if(bad_version(tempheader.zelda_version))
2446 {
2447 return qe_obsolete;
2448 }
2449
2450
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!p_getc(&tempheader.build,f,true))
2451 {
2452 return qe_invalid;
2453 }
2454
2455 119 FFCore.quest_format[vBuild] = tempheader.build;
2456
2457
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 119 times.
119 if(version<3)
2458 {
2459 if(!pfread(temp_pwd,30,f,true))
2460 {
2461 return qe_invalid;
2462 }
2463
2464 if(!p_igetw(&temp_pwdkey,f,true))
2465 {
2466 return qe_invalid;
2467 }
2468
2469 get_questpwd(temp_pwd, temp_pwdkey, temp_pwd2);
2470 cvs_MD5Init(&ctx);
2471 cvs_MD5Update(&ctx, (const uint8_t*)temp_pwd2, (unsigned)strlen(temp_pwd2));
2472 cvs_MD5Final(tempheader.pwd_hash, &ctx);
2473 }
2474 else
2475 {
2476
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!pfread(tempheader.pwd_hash,sizeof(tempheader.pwd_hash),f,true))
2477 {
2478 return qe_invalid;
2479 }
2480 }
2481
2482
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!p_igetw(&tempheader.internal,f,true))
2483 {
2484 return qe_invalid;
2485 }
2486
2487
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!p_getc(&tempheader.quest_number,f,true))
2488 {
2489 return qe_invalid;
2490 }
2491
2492 119 FFCore.quest_format[qQuestNumber] = tempheader.quest_number;
2493
2494
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!pfread(tempheader.version,sizeof(tempheader.version),f,true))
2495 {
2496 return qe_invalid;
2497 }
2498
2499 //FFCore.quest_format[qQuestVersion] = tempheader.version;
2500 //needs to be copied as char[9] or stored as a s.str
2501
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!pfread(tempheader.minver,sizeof(tempheader.minver),f,true))
2502 {
2503 return qe_invalid;
2504 }
2505
2506 //FFCore.quest_format[qMinQuestVersion] = tempheader.minver;
2507
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!pfread(tempheader.title,sizeof(tempheader.title),f,true))
2508 {
2509 return qe_invalid;
2510 }
2511 119 tempheader.title[sizeof(tempheader.title)-1] = 0;
2512
2513
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!pfread(tempheader.author,sizeof(tempheader.author),f,true))
2514 {
2515 return qe_invalid;
2516 }
2517 119 tempheader.author[sizeof(tempheader.author)-1] = 0;
2518
2519
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!p_getc(&tempheader.use_keyfile,f,true))
2520 {
2521 return qe_invalid;
2522 }
2523
2524 /*
2525 if(!pfread(tempheader.data_flags,sizeof(tempheader.data_flags),f,true))
2526 {
2527 return qe_invalid;
2528 }
2529 */
2530
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!p_getc(&tempheader.data_flags[ZQ_TILES],f,true))
2531 {
2532 return qe_invalid;
2533 }
2534
2535
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!pfread(&dummybuf,4,f,true))
2536 {
2537 return qe_invalid;
2538 }
2539
2540
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!p_getc(&tempheader.data_flags[ZQ_CHEATS2],f,true))
2541 {
2542 return qe_invalid;
2543 }
2544
2545
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!pfread(dummybuf,14,f,true))
2546 {
2547 return qe_invalid;
2548 }
2549
2550 119 templatepath_len=sizeof(tempheader.templatepath);
2551
2552
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(version==1)
2553 {
2554 templatepath_len=280;
2555 }
2556
2557
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!pfread(tempheader.templatepath,templatepath_len,f,true))
2558 {
2559 return qe_invalid;
2560 }
2561
2562
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 if(!p_getc(&temp_map_count,f,true))
2563 {
2564 return qe_invalid;
2565 }
2566
2567
2/2
✓ Branch 0 taken 46 times.
✓ Branch 1 taken 73 times.
119 if(version>=4)
2568 {
2569
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_igetl(&tempheader.new_version_id_main,f,true))
2570 {
2571 return qe_invalid;
2572 }
2573
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_igetl(&tempheader.new_version_id_second,f,true))
2574 {
2575 return qe_invalid;
2576 }
2577
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_igetl(&tempheader.new_version_id_third,f,true))
2578 {
2579 return qe_invalid;
2580 }
2581
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_igetl(&tempheader.new_version_id_fourth,f,true))
2582 {
2583 return qe_invalid;
2584 }
2585
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_igetl(&tempheader.new_version_id_alpha,f,true))
2586 {
2587 return qe_invalid;
2588 }
2589
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_igetl(&tempheader.new_version_id_beta,f,true))
2590 {
2591 return qe_invalid;
2592 }
2593
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_igetl(&tempheader.new_version_id_gamma,f,true))
2594 {
2595 return qe_invalid;
2596 }
2597
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_igetl(&tempheader.new_version_id_release,f,true))
2598 {
2599 return qe_invalid;
2600 }
2601
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_igetw(&tempheader.new_version_id_date_year,f,true))
2602 {
2603 return qe_invalid;
2604 }
2605
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_getc(&tempheader.new_version_id_date_month,f,true))
2606 {
2607 return qe_invalid;
2608 }
2609
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_getc(&tempheader.new_version_id_date_day,f,true))
2610 {
2611 return qe_invalid;
2612 }
2613
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_getc(&tempheader.new_version_id_date_hour,f,true))
2614 {
2615 return qe_invalid;
2616 }
2617
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_getc(&tempheader.new_version_id_date_minute,f,true))
2618 {
2619 return qe_invalid;
2620 }
2621
2622
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!pfread(tempheader.new_version_devsig,256,f,true))
2623 {
2624 return qe_invalid;
2625 }
2626
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 46 times.
46 if(!strcmp(tempheader.new_version_devsig, "Venrob"))
2627 strcpy(tempheader.new_version_devsig, "EmilyV99");
2628
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!pfread(tempheader.new_version_compilername,256,f,true))
2629 {
2630 return qe_invalid;
2631 }
2632
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!pfread(tempheader.new_version_compilerversion,256,f,true))
2633 {
2634 return qe_invalid;
2635 }
2636
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!pfread(tempheader.product_name,1024,f,true))
2637 {
2638 return qe_invalid;
2639 }
2640
2641
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_getc(&tempheader.compilerid,f,true))
2642 {
2643 return qe_invalid;
2644 }
2645
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_igetl(&tempheader.compilerversionnumber_first,f,true))
2646 {
2647 return qe_invalid;
2648 }
2649
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_igetl(&tempheader.compilerversionnumber_second,f,true))
2650 {
2651 return qe_invalid;
2652 }
2653
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_igetl(&tempheader.compilerversionnumber_third,f,true))
2654 {
2655 return qe_invalid;
2656 }
2657
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_igetl(&tempheader.compilerversionnumber_fourth,f,true))
2658 {
2659 return qe_invalid;
2660 }
2661
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_igetw(&tempheader.developerid,f,true))
2662 {
2663 return qe_invalid;
2664 }
2665
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!pfread(tempheader.made_in_module_name,1024,f,true))
2666 {
2667 return qe_invalid;
2668 }
2669
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!pfread(tempheader.build_datestamp,256,f,true))
2670 {
2671 return qe_invalid;
2672 }
2673
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 46 times.
46 if(!pfread(tempheader.build_timestamp,256,f,true))
2674 {
2675 return qe_invalid;
2676 }
2677 46 }
2678 else // <4
2679 {
2680 73 tempheader.new_version_id_main = 0;
2681 73 tempheader.new_version_id_second = 0;
2682 73 tempheader.new_version_id_third = 0;
2683 73 tempheader.new_version_id_fourth = 0;
2684 73 tempheader.new_version_id_alpha = 0;
2685 73 tempheader.new_version_id_beta = 0;
2686 73 tempheader.new_version_id_gamma = 0;
2687 73 tempheader.new_version_id_release = 0;
2688 73 tempheader.new_version_id_date_year = 0;
2689 73 tempheader.new_version_id_date_month = 0;
2690 73 tempheader.new_version_id_date_day = 0;
2691 73 tempheader.new_version_id_date_hour = 0;
2692 73 tempheader.new_version_id_date_minute = 0;
2693
2694 73 memset(tempheader.new_version_devsig, 0, 256);
2695 73 memset(tempheader.new_version_compilername, 0, 256);
2696 73 memset(tempheader.new_version_compilerversion, 0, 256);
2697 73 memset(tempheader.product_name, 0, 1024);
2698 73 strcpy(tempheader.product_name, "ZQuest Creator Suite");
2699
2700 73 tempheader.compilerid = 0;
2701 73 tempheader.compilerversionnumber_first = 0;
2702 73 tempheader.compilerversionnumber_second = 0;
2703 73 tempheader.compilerversionnumber_third = 0;
2704 73 tempheader.compilerversionnumber_fourth = 0;
2705 73 tempheader.developerid = 0;
2706
2707 73 memset(tempheader.made_in_module_name, 0, 1024);
2708 73 memset(tempheader.build_datestamp, 0, 256);
2709 73 memset(tempheader.build_timestamp, 0, 256);
2710 }
2711
2712
2/2
✓ Branch 0 taken 46 times.
✓ Branch 1 taken 73 times.
119 if ( version >= 5 )
2713 {
2714
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!pfread(tempheader.build_timezone,6,f,true))
2715 {
2716 return qe_invalid;
2717 }
2718 46 }
2719 else // < 5
2720 {
2721 73 memset(tempheader.build_timezone, 0, 6);
2722 }
2723
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 46 times.
119 if ( version >= 6 )
2724 {
2725 byte b;
2726
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_getc(&b,f,true))
2727 {
2728 return qe_invalid;
2729 }
2730 46 tempheader.external_zinfo = b?true:false;
2731 46 read_zinfo = true;
2732 46 }
2733
2734
2/2
✓ Branch 0 taken 46 times.
✓ Branch 1 taken 73 times.
119 if(version >= 7)
2735 {
2736
1/2
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
46 if(!p_getc(&(tempheader.new_version_is_nightly),f,true))
2737 {
2738 return qe_invalid;
2739 }
2740 46 }
2741 else
2742 {
2743 73 tempheader.new_version_is_nightly = false;
2744
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(tempheader.zelda_version < 0x255)
2745 {
2746
1/5
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 73 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
73 switch(tempheader.zelda_version)
2747 {
2748 case 0x254:
2749 tempheader.new_version_id_main = 2;
2750 tempheader.new_version_id_second = 54;
2751 break;
2752 case 0x250:
2753
5/16
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 22 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 5 times.
✓ Branch 11 taken 23 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 15 times.
✓ Branch 14 taken 8 times.
✗ Branch 15 not taken.
73 switch(tempheader.build)
2754 {
2755 case 19:
2756 tempheader.new_version_id_main = 2;
2757 tempheader.new_version_id_second = 50;
2758 tempheader.new_version_id_gamma = 1;
2759 break;
2760 case 20:
2761 tempheader.new_version_id_main = 2;
2762 tempheader.new_version_id_second = 50;
2763 tempheader.new_version_id_gamma = 2;
2764 break;
2765 case 21:
2766 tempheader.new_version_id_main = 2;
2767 tempheader.new_version_id_second = 50;
2768 tempheader.new_version_id_gamma = 3;
2769 break;
2770 case 22:
2771 tempheader.new_version_id_main = 2;
2772 tempheader.new_version_id_second = 50;
2773 tempheader.new_version_id_gamma = 4;
2774 break;
2775 case 23:
2776 tempheader.new_version_id_main = 2;
2777 tempheader.new_version_id_second = 50;
2778 tempheader.new_version_id_gamma = 5;
2779 break;
2780 case 24:
2781 22 tempheader.new_version_id_main = 2;
2782 22 tempheader.new_version_id_second = 50;
2783 22 tempheader.new_version_id_release = -1;
2784 22 break;
2785 case 25:
2786 tempheader.new_version_id_main = 2;
2787 tempheader.new_version_id_second = 50;
2788 tempheader.new_version_id_third = 1;
2789 tempheader.new_version_id_gamma = 1;
2790 break;
2791 case 26:
2792 tempheader.new_version_id_main = 2;
2793 tempheader.new_version_id_second = 50;
2794 tempheader.new_version_id_third = 1;
2795 tempheader.new_version_id_gamma = 2;
2796 break;
2797 case 27:
2798 tempheader.new_version_id_main = 2;
2799 tempheader.new_version_id_second = 50;
2800 tempheader.new_version_id_third = 1;
2801 tempheader.new_version_id_gamma = 3;
2802 break;
2803 case 28:
2804 5 tempheader.new_version_id_main = 2;
2805 5 tempheader.new_version_id_second = 50;
2806 5 tempheader.new_version_id_third = 1;
2807 5 tempheader.new_version_id_release = -1;
2808 5 break;
2809 case 29:
2810 23 tempheader.new_version_id_main = 2;
2811 23 tempheader.new_version_id_second = 50;
2812 23 tempheader.new_version_id_third = 2;
2813 23 tempheader.new_version_id_release = -1;
2814 23 break;
2815 case 30:
2816 tempheader.new_version_id_main = 2;
2817 tempheader.new_version_id_second = 50;
2818 tempheader.new_version_id_third = 3;
2819 tempheader.new_version_id_gamma = 1;
2820 break;
2821 case 31:
2822 15 tempheader.new_version_id_main = 2;
2823 15 tempheader.new_version_id_second = 53;
2824 15 tempheader.new_version_id_gamma = -1;
2825 15 break;
2826 case 32:
2827 8 tempheader.new_version_id_main = 2;
2828 8 tempheader.new_version_id_second = 53;
2829 8 tempheader.new_version_id_release = -1;
2830 8 break;
2831 case 33:
2832 tempheader.new_version_id_main = 2;
2833 tempheader.new_version_id_second = 53;
2834 tempheader.new_version_id_third = 1;
2835 break;
2836 }
2837 73 break;
2838
2839 case 0x211:
2840 tempheader.new_version_id_main = 2;
2841 tempheader.new_version_id_second = 11;
2842 tempheader.new_version_id_beta = tempheader.build;
2843 break;
2844 case 0x210:
2845 tempheader.new_version_id_main = 2;
2846 tempheader.new_version_id_second = 10;
2847 tempheader.new_version_id_beta = tempheader.build;
2848 break;
2849 }
2850 73 }
2851 }
2852
2/4
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 119 times.
119 if(printmetadata || __isZQuest)
2853 {
2854 print_quest_metadata(tempheader, loading_qst_name, loading_qst_num);
2855 }
2856 }
2857
2858 //{ Version Warning
2859 119 int32_t vercmp = tempheader.compareVer();
2860 119 int32_t astatecmp = compare(int32_t(tempheader.getAlphaState()), ALPHA_STATE);
2861 119 int32_t avercmp = compare(tempheader.getAlphaVer(), ALPHA_VER);
2862
4/6
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 46 times.
✓ Branch 3 taken 73 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 46 times.
165 if(vercmp > 0 || (!vercmp &&
2863
2/4
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 46 times.
✗ Branch 3 not taken.
46 (astatecmp > 0 || (!astatecmp &&
2864 46 avercmp > 0))))
2865 {
2866 bool r = true;
2867 if(loadquest_report)
2868 {
2869 enter_sys_pal();
2870 AlertDialog("Quest saved in newer version",
2871 "This quest was last saved in a newer version of ZQuest."
2872 " Attempting to load this quest may not work correctly; to"
2873 " avoid issues, try loading this quest in at least '" + std::string(tempheader.getVerStr()) + "'"
2874 "\n\nWould you like to continue loading anyway? (Not recommended)",
2875 [&](bool ret,bool)
2876 {
2877 r = ret;
2878 }).show();
2879 exit_sys_pal();
2880 }
2881 if(!r)
2882 return qe_silenterr;
2883 }
2884
1/2
✓ Branch 0 taken 119 times.
✗ Branch 1 not taken.
119 else if(tempheader.compareDate() > 0)
2885 {
2886 bool r = true;
2887 if(loadquest_report)
2888 {
2889 enter_sys_pal();
2890 AlertDialog("Quest saved in newer build",
2891 "This quest was last saved in a newer build of ZQuest, and may have"
2892 " issues loading in this build."
2893 "\n\nWould you like to continue loading anyway?",
2894 [&](bool ret,bool)
2895 {
2896 r = ret;
2897 }).show();
2898 exit_sys_pal();
2899 }
2900 if(!r)
2901 return qe_silenterr;
2902 }
2903 //}
2904
2905 119 read_ext_zinfo = tempheader.external_zinfo;
2906
2907
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 119 times.
119 if(keepdata==true)
2908 {
2909 119 memcpy(Header, &tempheader, sizeof(tempheader));
2910 119 map_count=temp_map_count;
2911 119 memcpy(midi_flags, temp_midi_flags, MIDIFLAGS_SIZE);
2912 119 }
2913
2914 119 return 0;
2915 119 }
2916
2917 93 int32_t readrules(PACKFILE *f, zquestheader *Header, bool keepdata)
2918 {
2919 int32_t dummy;
2920 zquestheader tempheader;
2921 93 word s_version=0;
2922 93 dword compatrule_version=0;
2923
2924 93 memcpy(&tempheader, Header, sizeof(tempheader));
2925
2926
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(tempheader.zelda_version >= 0x193)
2927 {
2928 //section version info
2929
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_version,f,true))
2930 {
2931 return qe_invalid;
2932 }
2933
2934 93 FFCore.quest_format[vRules] = s_version;
2935
2936
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&dummy,f,true))
2937 {
2938 return qe_invalid;
2939 }
2940
2941
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if(s_version > 16)
2942 {
2943
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(!p_igetl(&compatrule_version,f,true))
2944 {
2945 return qe_invalid;
2946 }
2947 20 }
2948 93 FFCore.quest_format[vCompatRule] = compatrule_version;
2949
2950 //section size
2951
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&dummy,f,true))
2952 {
2953 return qe_invalid;
2954 }
2955
2956
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if ( s_version < 15 )
2957 {
2958 //finally... section data
2959
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(!pfread(quest_rules,QUESTRULES_SIZE,f,true))
2960 {
2961 return qe_invalid;
2962 }
2963 73 }
2964 else
2965 {
2966
2967
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
20 if(!pfread(quest_rules,QUESTRULES_NEW_SIZE,f,true))
2968 {
2969 return qe_invalid;
2970 }
2971
2972 }
2973 93 }
2974
2975 //al_trace("Rules version %d\n", s_version);
2976 //{ bunch of compat stuff
2977 93 memcpy(deprecated_rules, quest_rules, QUESTRULES_NEW_SIZE);
2978
2979
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version<2)
2980 {
2981 set_bit(quest_rules,14,0);
2982 set_bit(quest_rules,27,0);
2983 set_bit(quest_rules,28,0);
2984 set_bit(quest_rules,29,0);
2985 set_bit(quest_rules,30,0);
2986 set_bit(quest_rules,32,0);
2987 set_bit(quest_rules,36,0);
2988 set_bit(quest_rules,49,0);
2989 set_bit(quest_rules,50,0);
2990 set_bit(quest_rules,51,0);
2991 set_bit(quest_rules,68,0);
2992 set_bit(quest_rules,75,0);
2993 set_bit(quest_rules,76,0);
2994 set_bit(quest_rules,98,0);
2995 set_bit(quest_rules,110,0);
2996 set_bit(quest_rules,113,0);
2997 set_bit(quest_rules,116,0);
2998 set_bit(quest_rules,102,0);
2999 set_bit(quest_rules,132,0);
3000 }
3001
3002 //Now, do any updates...
3003
2/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if((tempheader.zelda_version < 0x211)||((tempheader.zelda_version == 0x211)&&(tempheader.build<18)))
3004 {
3005 set_bit(quest_rules, qr_SMOOTHVERTICALSCROLLING,1);
3006 set_bit(quest_rules, qr_REPLACEOPENDOORS, 1);
3007 set_bit(quest_rules, qr_OLDLENSORDER, 1);
3008 set_bit(quest_rules, qr_NOFAIRYGUYFIRES, 1);
3009 set_bit(quest_rules, qr_TRIGGERSREPEAT, 1);
3010 }
3011
3012
2/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if((tempheader.zelda_version < 0x193)||((tempheader.zelda_version == 0x193)&&(tempheader.build<3)))
3013 {
3014 set_bit(quest_rules,qr_WALLFLIERS,1);
3015 }
3016
3017
2/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if((tempheader.zelda_version < 0x193)||((tempheader.zelda_version == 0x193)&&(tempheader.build<4)))
3018 {
3019 set_bit(quest_rules,qr_NOBOMBPALFLASH,1);
3020 }
3021
3022
2/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if((tempheader.zelda_version < 0x193)||((tempheader.zelda_version == 0x193)&&(tempheader.build<3)))
3023 {
3024 set_bit(quest_rules,qr_NOSCROLLCONTINUE,1);
3025 }
3026
3027
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(tempheader.zelda_version <= 0x210)
3028 {
3029 set_bit(quest_rules,qr_ARROWCLIP,1);
3030 }
3031
3032
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(tempheader.zelda_version == 0x210)
3033 {
3034 set_bit(quest_rules, qr_NOSCROLLCONTINUE, get_bit(quest_rules, qr_CMBCYCLELAYERS));
3035 set_bit(quest_rules, qr_CMBCYCLELAYERS, 0);
3036 set_bit(quest_rules, qr_CONT_SWORD_TRIGGERS, 1);
3037 }
3038
3039
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(tempheader.zelda_version <= 0x210)
3040 {
3041 set_bit(quest_rules,qr_OLDSTYLEWARP,1);
3042 set_bit(quest_rules,qr_210_WARPRETURN,1);
3043 }
3044
3045 //might not be correct
3046
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(tempheader.zelda_version < 0x210)
3047 {
3048 set_bit(deprecated_rules, qr_OLDTRIBBLES_DEP,1);
3049 set_bit(quest_rules, qr_OLDHOOKSHOTGRAB,1);
3050 }
3051
3052
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(tempheader.zelda_version < 0x211)
3053 {
3054 set_bit(quest_rules, qr_WRONG_BRANG_TRAIL_DIR,1);
3055 }
3056
3057
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
93 if(tempheader.zelda_version == 0x192 && tempheader.build == 163)
3058 {
3059 set_bit(quest_rules, qr_192b163_WARP,1);
3060 }
3061
3062
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(tempheader.zelda_version == 0x210)
3063 {
3064 set_bit(deprecated_rules, qr_OLDTRIBBLES_DEP, get_bit(quest_rules, qr_DMGCOMBOPRI));
3065 set_bit(quest_rules, qr_DMGCOMBOPRI, 0);
3066 }
3067
3068
2/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if(tempheader.zelda_version < 0x211 || (tempheader.zelda_version == 0x211 && tempheader.build<15))
3069 {
3070 set_bit(quest_rules, qr_OLDPICKUP,1);
3071 }
3072
3073
2/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if(tempheader.zelda_version < 0x211 || (tempheader.zelda_version == 0x211 && tempheader.build < 18))
3074 {
3075 set_bit(quest_rules,qr_NOSOLIDDAMAGECOMBOS, 1);
3076 set_bit(quest_rules, qr_ITEMPICKUPSETSBELOW, 1); // broke around build 400
3077 }
3078
3079
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(tempheader.zelda_version < 0x250) // version<0x250 checks for beta 18; build was set to 18 prematurely
3080 {
3081 set_bit(quest_rules,qr_HOOKSHOTDOWNBUG, 1);
3082 }
3083
3084
4/4
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
✓ Branch 2 taken 51 times.
✓ Branch 3 taken 22 times.
93 if(tempheader.zelda_version == 0x250 && tempheader.build == 24) // Annoying...
3085 {
3086 22 set_bit(quest_rules,qr_PEAHATCLOCKVULN, 1);
3087 22 }
3088
3089
4/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 73 times.
✓ Branch 3 taken 20 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 73 times.
93 if(tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x250 && tempheader.build < 22)) //22 is 2.50.0 RC4. Gotta set the door repair QR... -Dimi
3090 {
3091 set_bit(quest_rules,qr_OLD_DOORREPAIR, 1);
3092 }
3093
3094
4/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 73 times.
✓ Branch 3 taken 20 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 73 times.
93 if(tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x250 && tempheader.build < 20)) //20 is 2.50.0 RC1 and RC2 (cause it didn't get bumped). Okay I'm gonna be honest I have no idea if any 2.50 build was available before RC1, but gonna try and cover my ass here -Dimi
3095 {
3096 set_bit(quest_rules,qr_OLD_SECRETMONEY, 1);
3097 }
3098
3099
5/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 73 times.
✓ Branch 3 taken 20 times.
✓ Branch 4 taken 22 times.
✓ Branch 5 taken 51 times.
93 if(tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x250 && tempheader.build < 28)) //28 is 2.50.1 final. Potion bug might have been used, I dunno. -Dimi
3100 {
3101 22 set_bit(quest_rules,qr_OLD_POTION_OR_HC, 1);
3102 22 }
3103
3104
5/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 73 times.
✓ Branch 3 taken 20 times.
✓ Branch 4 taken 22 times.
✓ Branch 5 taken 51 times.
93 if(tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x250 && tempheader.build<28))
3105 {
3106 22 set_bit(quest_rules, qr_OFFSCREENWEAPONS, 1);
3107 22 }
3108
3109 //Bombchu fix.
3110
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(tempheader.zelda_version == 0x250)
3111 {
3112
2/2
✓ Branch 0 taken 51 times.
✓ Branch 1 taken 22 times.
73 if ( tempheader.build == 24 ) //2.50.0
3113 {
3114 22 set_bit(quest_rules, qr_BOMBCHUSUPERBOMB, 1);
3115 22 }
3116
2/2
✓ Branch 0 taken 68 times.
✓ Branch 1 taken 5 times.
73 if ( tempheader.build == 28 ) //2.50.1
3117 {
3118 5 set_bit(quest_rules, qr_BOMBCHUSUPERBOMB, 1);
3119 5 }
3120
2/2
✓ Branch 0 taken 50 times.
✓ Branch 1 taken 23 times.
73 if ( tempheader.build == 29 ) //2.50.2
3121 {
3122 23 set_bit(quest_rules, qr_BOMBCHUSUPERBOMB, 0);
3123 23 }
3124
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 if ( tempheader.build == 30 ) //2.50.3RC1
3125 {
3126 set_bit(quest_rules, qr_BOMBCHUSUPERBOMB, 0);
3127 }
3128 73 }
3129
3130
5/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 73 times.
✓ Branch 3 taken 20 times.
✓ Branch 4 taken 27 times.
✓ Branch 5 taken 46 times.
93 if(tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x250 && tempheader.build<29))
3131 {
3132 // qr_OFFSETEWPNCOLLISIONFIX
3133 // All 'official' quests need this disabled.
3134 // All 2.10 and lower quests need this enabled to preseve compatability.
3135 // All 2.11 - 2.5.1 quests should have it set also, due to a bug in about half of all the betas.
3136
3137 //~Gleeok
3138 27 set_bit(quest_rules, qr_OFFSETEWPNCOLLISIONFIX, 1); //This has to be set!!!!
3139
3140 // Broke in build 695
3141
2/4
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 27 times.
27 if(tempheader.zelda_version>=0x211 && tempheader.build>=18)
3142 27 set_bit(quest_rules, qr_BROKENSTATUES, 1);
3143 27 }
3144
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if (tempheader.zelda_version <= 0x190)
3145 {
3146 set_bit(quest_rules, qr_COPIED_SWIM_SPRITES, 1);
3147 }
3148
6/10
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 20 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 20 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 20 times.
93 if ( (tempheader.zelda_version == 0x250 && tempheader.build < 33) || tempheader.zelda_version == 0x254 || tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x255 && tempheader.build < 50) )
3149 {
3150 73 set_bit(quest_rules, qr_OLD_SLASHNEXT_SECRETS, 1);
3151 73 }
3152
3153
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if ( (tempheader.zelda_version < 0x211) ) //2.10 water and ladder interaction
3154 {
3155 set_bit(quest_rules, qr_OLD_210_WATER, 1);
3156 }
3157
3158
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( (tempheader.zelda_version < 0x255 ) || (tempheader.zelda_version == 0x255 && tempheader.build < 51 ) ) //2.10 water and ladder interaction
3159 {
3160 73 set_bit(quest_rules,qr_STEP_IS_FLOAT,0);
3161 73 }
3162
3163
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if ( tempheader.zelda_version < 0x250 )
3164 {
3165 set_bit(quest_rules, qr_8WAY_SHOT_SFX, 1);
3166 }
3167
3168
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version < 3)
3169 {
3170 set_bit(quest_rules, qr_HOLDNOSTOPMUSIC, 1);
3171 set_bit(quest_rules, qr_CAVEEXITNOSTOPMUSIC, 1);
3172 }
3173
3174
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version<4)
3175 {
3176 set_bit(quest_rules,10,0);
3177 }
3178
3179
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version<5)
3180 {
3181 set_bit(quest_rules,27,0);
3182 }
3183
3184
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version<6)
3185 {
3186 set_bit(quest_rules,46,0);
3187 }
3188
3189
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version<7) // January 2008
3190 {
3191 set_bit(quest_rules,qr_HEARTSREQUIREDFIX,0);
3192 set_bit(quest_rules,qr_PUSHBLOCKCSETFIX,1);
3193 }
3194
3195
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(s_version<8)
3196 {
3197 set_bit(quest_rules, 12, 0);
3198 }
3199 else
3200 {
3201 93 set_bit(deprecated_rules, 12, 0);
3202 }
3203
3204
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version<9) // October 2008
3205 {
3206 set_bit(quest_rules,qr_NOROPE2FLASH_DEP,0);
3207 set_bit(quest_rules,qr_NOBUBBLEFLASH_DEP,0);
3208 set_bit(quest_rules,qr_GHINI2BLINK_DEP,0);
3209 set_bit(quest_rules,qr_PHANTOMGHINI2_DEP,0);
3210 }
3211
3212
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version<10) // December 2008
3213 {
3214 set_bit(quest_rules,qr_NOCLOCKS_DEP,0);
3215 set_bit(quest_rules, qr_ALLOW10RUPEEDROPS_DEP,0);
3216 }
3217
3218
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version<11) // April 2009
3219 {
3220 set_bit(quest_rules,qr_SLOWENEMYANIM_DEP,0);
3221 }
3222
3223
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version<12) // December 2009
3224 {
3225 set_bit(quest_rules,qr_BRKBLSHLDS_DEP,0);
3226 set_bit(quest_rules, qr_OLDTRIBBLES_DEP,0);
3227 }
3228
3229 //if(tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x250 && tempheader.build < 24))
3230
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version < 13)
3231 {
3232 set_bit(quest_rules,qr_SHOPCHEAT, 1);
3233 }
3234
3235 // Not entirely sure this is the best place for this...
3236 //2.50.2 bitmap offset fix
3237 93 memset(extra_rules, 0, EXTRARULES_SIZE);
3238
5/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 73 times.
✓ Branch 3 taken 20 times.
✓ Branch 4 taken 27 times.
✓ Branch 5 taken 46 times.
93 if(tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x250 && tempheader.build<29))
3239 {
3240 27 set_bit(extra_rules, er_BITMAPOFFSET, 1);
3241 27 set_bit(quest_rules, qr_BITMAPOFFSETFIX, 1);
3242 27 }
3243 //required because quest templates also used this bit, although
3244 //it never did anything, before. -Z
3245
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if ( tempheader.zelda_version == 0x250 )
3246 {
3247
5/6
✓ Branch 0 taken 50 times.
✓ Branch 1 taken 23 times.
✓ Branch 2 taken 50 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✓ Branch 5 taken 35 times.
73 if( tempheader.build == 29 || tempheader.build == 30 || tempheader.build == 31 )
3248 {
3249 38 set_bit(extra_rules, er_BITMAPOFFSET, 0);
3250 38 set_bit(quest_rules, qr_BITMAPOFFSETFIX, 0);
3251 38 }
3252 73 }
3253
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if ( tempheader.zelda_version == 0x254 )
3254 {
3255 set_bit(extra_rules, er_BITMAPOFFSET, 0);
3256 set_bit(quest_rules, qr_BITMAPOFFSETFIX, 0);
3257 }
3258
3/4
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
93 if ( tempheader.zelda_version == 0x255 && tempheader.build < 42 ) //QR was added to 255 in this build.
3259 {
3260 set_bit(extra_rules, er_BITMAPOFFSET, 0);
3261 set_bit(quest_rules, qr_BITMAPOFFSETFIX, 0);
3262 }
3263 //optimise fast drawing for older versions.
3264
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 42) )
3265 {
3266 73 set_bit(quest_rules, qr_OLDSPRITEDRAWS, 1);
3267 73 }
3268 //Old eweapon->Parent (was added in 2.54, Alpha 19)
3269 //The change was made in build 43, but I'm setting this to < 42, because quests made in 42 would benefit from this change, and
3270 //older quests can set the rule by hand. We need a new qst.dat again.
3271
4/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✓ Branch 3 taken 73 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version == 0x254 || (tempheader.zelda_version == 0x255 && tempheader.build < 42) )
3272 {
3273 set_bit(quest_rules, qr_OLDEWPNPARENT, 1);
3274 }
3275
4/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✓ Branch 3 taken 73 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version == 0x254 || (tempheader.zelda_version == 0x255 && tempheader.build < 44) )
3276 {
3277 set_bit(quest_rules, qr_OLDCREATEBITMAP_ARGS, 1);
3278 }
3279
4/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✓ Branch 3 taken 73 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version == 0x254 || (tempheader.zelda_version == 0x255 && tempheader.build < 45) )
3280 {
3281 set_bit(quest_rules, qr_OLDQUESTMISC, 1);
3282 }
3283
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if ( tempheader.zelda_version < 0x254 )
3284 {
3285 73 set_bit(quest_rules, qr_OLDCREATEBITMAP_ARGS, 0);
3286 73 set_bit(quest_rules, qr_OLDEWPNPARENT, 0);
3287 73 set_bit(quest_rules, qr_OLDQUESTMISC, 0);
3288 73 }
3289
3290 //item scripts continue to run
3291
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 44) )
3292 {
3293 73 set_bit(quest_rules, qr_ITEMSCRIPTSKEEPRUNNING, 0);
3294 73 set_bit(quest_rules, qr_SCRIPTSRUNINHEROSTEPFORWARD, 0);
3295 73 set_bit(quest_rules, qr_FIXSCRIPTSDURINGSCROLLING, 0);
3296 73 set_bit(quest_rules, qr_SCRIPTDRAWSINWARPS, 0);
3297 73 set_bit(quest_rules, qr_DYINGENEMYESDONTHURTHERO, 0);
3298 73 set_bit(quest_rules, qr_OUTOFBOUNDSENEMIES, 0);
3299 73 set_bit(quest_rules, qr_SPRITEXY_IS_FLOAT, 0);
3300 73 }
3301
3302
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 46) )
3303 {
3304 73 set_bit(quest_rules, qr_CLEARINITDONSCRIPTCHANGE, 1);
3305 73 }
3306
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 46) )
3307 {
3308 73 set_bit(quest_rules, qr_TRACESCRIPTIDS, 0);
3309 73 set_bit(quest_rules, qr_SCRIPT_FRIENDLY_ENEMY_TYPES, 1);
3310 73 set_bit(quest_rules, qr_PARSER_BOOL_TRUE_DECIMAL, 1);
3311 73 set_bit(quest_rules,qr_PARSER_250DIVISION,1);
3312 73 set_bit(quest_rules,qr_PARSER_BOOL_TRUE_DECIMAL,1);
3313 73 set_bit(quest_rules,qr_PARSER_TRUE_INT_SIZE,0);
3314 73 set_bit(quest_rules,qr_PARSER_FORCE_INLINE,0);
3315 73 set_bit(quest_rules,qr_PARSER_BINARY_32BIT,0);
3316
2/2
✓ Branch 0 taken 72 times.
✓ Branch 1 taken 1 times.
73 if ( get_bit(quest_rules, qr_SELECTAWPN) )
3317 {
3318 1 set_bit(quest_rules,qr_NO_L_R_BUTTON_INVENTORY_SWAP,1);
3319 //In < 2.55a27, if you had an A+B subscreen, L and R didn't shift through inventory.
3320 //Now they **do**, unless you disable that behaviour.
3321 //For the sake of compatibility, old quests with the A+B subscreen rule enabed
3322 //now enable the disable L/R item swap on load.
3323 1 }
3324
3325 73 }
3326
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 47) )
3327 {
3328 //Compatibility: Setting the hero's action to rafting was previously disallowed, though legal for scripts to attempt.
3329 73 set_bit(quest_rules, qr_DISALLOW_SETTING_RAFTING, 1);
3330 //Compatibility: The calculation for when to loop an animation did not factor in ASkipY correctly, resulting in
3331 //animations ending earlier than they should.
3332 73 set_bit(quest_rules, qr_BROKEN_ASKIP_Y_FRAMES, 1);
3333 //Enemies would ignore solidity on the top half of combos
3334 73 set_bit(quest_rules, qr_ENEMY_BROKEN_TOP_HALF_SOLIDITY, 1);
3335 //Ceiling collison was a bit wonky, including hitting your head before you are near the ceiling or clipping into it slightly.
3336 73 set_bit(quest_rules, qr_OLD_SIDEVIEW_CEILING_COLLISON, 1);
3337 //If an itemdata had a 'frames' of 0, items created of that data would ignore all changes to 'frames'
3338 73 set_bit(quest_rules, qr_0AFRAME_ITEMS_IGNORE_AFRAME_CHANGES, 1);
3339 //Collision used some odd calculations before, and enemies could not be hit back into the top row or left column
3340 73 set_bit(quest_rules, qr_OLD_ENEMY_KNOCKBACK_COLLISION, 1);
3341 73 }
3342
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if ( tempheader.zelda_version < 0x255 )
3343 {
3344 73 set_bit(quest_rules, qr_NOFFCWAITDRAW, 1);
3345 73 set_bit(quest_rules, qr_NOITEMWAITDRAW, 1);
3346 73 set_bit(quest_rules, qr_SETENEMYWEAPONSPRITESONWPNCHANGE, 1);
3347 73 set_bit(quest_rules, qr_OLD_INIT_SCRIPT_TIMING, 1);
3348 //set_bit(quest_rules, qr_DO_NOT_DEALLOCATE_INIT_AND_SAVELOAD_ARRAYS, 1);
3349 73 }
3350
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version < 0x255 || ( tempheader.zelda_version == 0x255 && tempheader.build < 48 ) )
3351 {
3352 73 set_bit(quest_rules, qr_SETENEMYWEAPONSPRITESONWPNCHANGE, 1);
3353 73 }
3354
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if( tempheader.zelda_version < 0x255 || ( tempheader.zelda_version == 0x255 && tempheader.build < 52 ) )
3355 {
3356 73 set_bit(quest_rules, qr_OLD_PRINTF_ARGS, 1);
3357 73 }
3358
3359
3360
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 54) )
3361 {
3362 73 set_bit(quest_rules, qr_BROKEN_RING_POWER, 1);
3363 73 }
3364
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 56) )
3365 {
3366 73 set_bit(quest_rules, qr_NO_OVERWORLD_MAP_CHARTING, 1);
3367 73 }
3368
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 57) )
3369 {
3370 73 set_bit(quest_rules, qr_DUNGEONS_USE_CLASSIC_CHARTING, 1);
3371 73 }
3372
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 58) )
3373 {
3374 //Rule used to be 'qr_SETXYBUTTONITEMS', now split.
3375
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 if(get_bit(quest_rules,qr_SET_XBUTTON_ITEMS))
3376 set_bit(quest_rules,qr_SET_YBUTTON_ITEMS,1);
3377 73 }
3378
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 59) )
3379 {
3380 73 set_bit(quest_rules,qr_ALLOW_EDITING_COMBO_0,1);
3381 73 }
3382
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 60) )
3383 {
3384 73 set_bit(quest_rules,qr_OLD_CHEST_COLLISION,1);
3385 73 }
3386
3387
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if ( tempheader.zelda_version < 0x254 )
3388 {
3389 73 set_bit(quest_rules, qr_250WRITEEDEFSCRIPT, 1);
3390 73 }
3391 //Sideview spikes in 2.50.0
3392
5/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 73 times.
✓ Branch 3 taken 20 times.
✓ Branch 4 taken 22 times.
✓ Branch 5 taken 51 times.
93 if(tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x250 && tempheader.build<27)) //2.50.1RC3
3393 {
3394 22 set_bit(quest_rules, qr_OLDSIDEVIEWSPIKES, 1);
3395 22 }
3396 //more 2.50 fixes -Z
3397
5/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 73 times.
✓ Branch 3 taken 20 times.
✓ Branch 4 taken 50 times.
✓ Branch 5 taken 23 times.
93 if(tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x250 && tempheader.build<31))
3398 {
3399 50 set_bit(quest_rules, qr_MELEEMAGICCOST, 0);
3400 50 set_bit(quest_rules, qr_GANONINTRO, 0); //This will get flipped later on in the compatrule 11 check. That's why it's turning it off.
3401 50 set_bit(quest_rules, qr_OLDMIRRORCOMBOS, 1);
3402 50 set_bit(quest_rules, qr_BROKENBOOKCOST, 1);
3403 50 set_bit(quest_rules, qr_BROKENCHARINTDRAWING, 1);
3404
3405 50 }
3406
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
93 if(tempheader.zelda_version == 0x254 && tempheader.build<41)
3407 {
3408 //set_bit(quest_rules,qr_MELEEMAGICCOST, get_bit(extra_rules,er_MAGICCOSTSWORD));
3409 set_bit(quest_rules,qr_MELEEMAGICCOST, 1);
3410 }
3411
3412
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(tempheader.zelda_version < 0x193)
3413 {
3414 set_bit(quest_rules, qr_SHORTDGNWALK, 1);
3415 }
3416
3417
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(tempheader.zelda_version < 0x255)
3418 {
3419 73 set_bit(quest_rules, qr_OLDINFMAGIC, 1);
3420 73 }
3421
3422
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if((tempheader.zelda_version < 0x250)) //2.10 and earlier allowed the triforce to Warp Player out of Item Cellars in Dungeons. -Z (15th March, 2019 )
3423 {
3424 set_bit(quest_rules,qr_SIDEVIEWTRIFORCECELLAR,1);
3425 }
3426
3427
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 47) )
3428 {
3429 73 set_bit(quest_rules,qr_OLD_F6,1);
3430 73 }
3431
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 49) )
3432 {
3433 73 set_bit(quest_rules,qr_NO_OVERWRITING_HOPPING,1);
3434 73 }
3435
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 50) )
3436 {
3437 73 set_bit(quest_rules,qr_STRING_FRAME_OLD_WIDTH_HEIGHT,1);
3438 73 }
3439
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 53) )
3440 {
3441 73 set_bit(quest_rules,qr_BROKEN_OVERWORLD_MINIMAP,1);
3442 73 }
3443 //}
3444
3445
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 1)
3446 {
3447 //Enemies->Secret only affects flag 16-31
3448 73 set_bit(quest_rules,qr_ENEMIES_SECRET_ONLY_16_31,1);
3449 73 }
3450
3451
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 2)
3452 {
3453 //Old CSet2 Handling
3454 73 set_bit(quest_rules,qr_OLDCS2,1);
3455 73 }
3456
3457
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 3)
3458 {
3459 //Hardcoded Shadow/Spawn/Death anim frames
3460 73 set_bit(quest_rules,qr_HARDCODED_ENEMY_ANIMS,1);
3461 73 }
3462
3463
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 4)
3464 {
3465 //Hardcoded Shadow/Spawn/Death anim frames
3466 73 set_bit(quest_rules,qr_OLD_ITEMDATA_SCRIPT_TIMING,1);
3467 73 }
3468
3469
3/4
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 73 times.
93 if(compatrule_version < 5 && tempheader.zelda_version >= 0x250)
3470 {
3471 //Hardcoded Shadow/Spawn/Death anim frames
3472 73 set_bit(quest_rules,qr_NO_LANMOLA_RINGLEADER,1);
3473 73 }
3474
3475
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 6)
3476 {
3477 //Step->Secret (Temp) only affects flag 16-31
3478 73 set_bit(quest_rules,qr_STEPTEMP_SECRET_ONLY_16_31,1);
3479 73 }
3480
3481
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 7)
3482 {
3483 //'Hit All Triggers->Perm Secret' doesn't trigger temp secrets
3484 73 set_bit(quest_rules,qr_ALLTRIG_PERMSEC_NO_TEMP,1);
3485 73 }
3486
3487
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 8)
3488 {
3489 //Hardcoded LItem/Bomb/Clock/Magic Tile Mods
3490 73 set_bit(quest_rules,qr_HARDCODED_LITEM_LTMS,1);
3491 73 }
3492
3493
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 9)
3494 {
3495 //Hardcoded BS Patras
3496 73 set_bit(quest_rules,qr_HARDCODED_BS_PATRA,1);
3497 //Hardcoded Patra Inner Eye offsets
3498 73 set_bit(quest_rules,qr_PATRAS_USE_HARDCODED_OFFSETS,1);
3499 //Broken 'Big enemy' animation style
3500 73 set_bit(quest_rules,qr_BROKEN_BIG_ENEMY_ANIMATION,1);
3501 //Broken Attribute 31/32
3502 73 set_bit(quest_rules,qr_BROKEN_ATTRIBUTE_31_32,1);
3503 73 }
3504
3505
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 10)
3506 {
3507 //Shared candle use limits
3508 73 set_bit(quest_rules,qr_CANDLES_SHARED_LIMIT,1);
3509 73 }
3510
3511
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 11)
3512 {
3513 //No cross-screen return points
3514 73 set_bit(quest_rules,qr_OLD_RESPAWN_POINTS,1);
3515 73 }
3516
3517
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 12)
3518 {
3519 //Old fire trail duration
3520 73 set_bit(quest_rules,qr_OLD_FLAMETRAIL_DURATION,1);
3521 //Old Intro String in Ganon Room Behavior
3522
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(get_bit(quest_rules,qr_GANONINTRO)) set_bit(quest_rules,qr_GANONINTRO,0);
3523 73 else set_bit(quest_rules,qr_GANONINTRO,1);
3524 73 }
3525
3526
3/4
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
✓ Branch 2 taken 73 times.
✗ Branch 3 not taken.
93 if(compatrule_version < 13 && tempheader.zelda_version >= 0x255)
3527 {
3528 //ANone doesn't reset to originaltile
3529 set_bit(quest_rules,qr_ANONE_NOANIM,1);
3530 }
3531
3532
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 14)
3533 {
3534 //Old Bridge Combo Behavior
3535 73 set_bit(quest_rules,qr_OLD_BRIDGE_COMBOS,1);
3536 73 }
3537
3538
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 15)
3539 {
3540 //Broken Z3 Animation
3541 73 set_bit(quest_rules,qr_BROKEN_Z3_ANIMATION,1);
3542 73 }
3543
3544
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 16)
3545 {
3546 //Old Enemy Tile Behavior with Animation (None) Enemies
3547 73 set_bit(quest_rules,qr_OLD_TILE_INITIALIZATION,1);
3548 73 }
3549
3550
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 17)
3551 {
3552 //Old Quake/DrawYOffset behavior
3553 //set_bit(quest_rules,qr_OLD_DRAWOFFSET,1);
3554 //I'm leaving this commented cause I doubt it'll break anything and I think the bugfix might be appreciated in older versions.
3555 //On the offchance that it *does* break old quests, fixing it is as simple as uncommenting the set_bit above.
3556 73 }
3557
3558
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 18)
3559 {
3560 //Broken DrawScreen Derivative Functions
3561 73 set_bit(quest_rules,qr_BROKEN_DRAWSCREEN_FUNCTIONS,1);
3562 //Scrolling Cancels Charge
3563 73 set_bit(quest_rules,qr_SCROLLING_KILLS_CHARGE,1);
3564 73 }
3565
3566
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 19)
3567 {
3568 //Broken Enemy Item Carrying with Large Enemies
3569 73 set_bit(quest_rules,qr_BROKEN_ITEM_CARRYING,1);
3570 73 }
3571
3572
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 20)
3573 {
3574 73 set_bit(quest_rules,qr_CUSTOMWEAPON_IGNORE_COST,1);
3575 73 }
3576
3577
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 21)
3578 {
3579 73 set_bit(quest_rules,qr_LEEVERS_DONT_OBEY_STUN,1);
3580 73 set_bit(quest_rules,qr_GANON_CANT_SPAWN_ON_CONTINUE,1);
3581 73 set_bit(quest_rules,qr_WIZZROBES_DONT_OBEY_STUN,1);
3582 73 set_bit(quest_rules,qr_OLD_BUG_NET,1);
3583 73 set_bit(quest_rules,qr_MANHANDLA_BLOCK_SFX,1);
3584 73 }
3585
3586
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 22)
3587 {
3588 73 set_bit(quest_rules,qr_BROKEN_KEEPOLD_FLAG,1);
3589 73 }
3590
3591
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 23)
3592 {
3593 73 set_bit(quest_rules,qr_OLD_HALF_MAGIC,1);
3594 73 }
3595
3596
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 24)
3597 {
3598 73 set_bit(quest_rules,qr_WARPS_RESTART_DMAPSCRIPT,1);
3599 73 set_bit(quest_rules,qr_DMAP_0_CONTINUE_BUG,1);
3600 73 }
3601
3602
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 25)
3603 {
3604
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if (get_bit(quest_rules, qr_OLD_FAIRY_LIMIT)) set_bit(quest_rules,qr_OLD_FAIRY_LIMIT,0);
3605 73 else set_bit(quest_rules,qr_OLD_FAIRY_LIMIT,1);
3606 73 set_bit(quest_rules,qr_OLD_SCRIPTED_KNOCKBACK,1);
3607 73 }
3608
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 26)
3609 {
3610 73 set_bit(quest_rules,qr_OLD_KEESE_Z_AXIS,1);
3611 73 set_bit(quest_rules,qr_POLVIRE_NO_SHADOW,1);
3612 73 set_bit(quest_rules,qr_SUBSCR_OLD_SELECTOR,1);
3613 73 }
3614
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(compatrule_version < 27) //Noticed some junk data in the QR array...
3615 {
3616
2/2
✓ Branch 0 taken 21973 times.
✓ Branch 1 taken 73 times.
22046 for(auto q = qr_POLVIRE_NO_SHADOW+1; q < qr_PARSER_250DIVISION; ++q)
3617 21973 set_bit(quest_rules,q,0);
3618
2/2
✓ Branch 0 taken 8176 times.
✓ Branch 1 taken 73 times.
8249 for(auto q = qr_COMBODATA_INITD_MULT_TENK+1; q < QUESTRULES_NEW_SIZE*8; ++q)
3619 8176 set_bit(quest_rules,q,0);
3620 //This should nuke any remaining junk data... not sure if it affected anything previous. -Em
3621 73 }
3622
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 75 times.
93 if(compatrule_version < 28)
3623 {
3624 75 set_bit(quest_rules,qr_SUBSCR_BACKWARDS_ID_ORDER,1);
3625 75 }
3626
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 75 times.
93 if(compatrule_version < 29)
3627 {
3628 75 set_bit(quest_rules,qr_OLD_LOCKBLOCK_COLLISION,1);
3629 75 }
3630
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 75 times.
93 if(compatrule_version < 30)
3631 {
3632 75 set_bit(quest_rules,qr_DECO_2_YOFFSET,1);
3633 75 set_bit(quest_rules,qr_SCREENSTATE_80s_BUG,1);
3634 75 }
3635
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 75 times.
93 if(compatrule_version < 31)
3636 {
3637 75 set_bit(quest_rules,qr_GOHMA_UNDAMAGED_BUG,1);
3638 75 set_bit(quest_rules,qr_FFCPRELOAD_BUGGED_LOAD,1);
3639 75 }
3640
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 75 times.
93 if(compatrule_version < 32)
3641 {
3642 75 set_bit(quest_rules,qr_BROKEN_GETPIXEL_VALUE,1);
3643 75 }
3644
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 75 times.
93 if(compatrule_version < 33)
3645 {
3646 75 set_bit(quest_rules,qr_NO_LIFT_SPRITE,1);
3647 75 }
3648
2/2
✓ Branch 0 taken 12 times.
✓ Branch 1 taken 81 times.
93 if(compatrule_version < 34)
3649 {
3650 81 set_bit(quest_rules,qr_OLD_SIDEVIEW_LANDING_CODE,1);
3651 81 set_bit(quest_rules,qr_OLD_FFC_SPEED_CAP,1);
3652 81 set_bit(quest_rules,qr_OLD_FFC_FUNCTIONALITY,1);
3653 81 set_bit(quest_rules,qr_OLD_WIZZROBE_SUBMERGING,1);
3654 81 }
3655
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 83 times.
93 if(compatrule_version < 35)
3656 {
3657 // Leaving this commented for now, might need to enable later -Em
3658 // set_bit(quest_rules,qr_ZS_NO_NEG_ARRAY,1);
3659 83 }
3660
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 83 times.
93 if(compatrule_version < 36)
3661 {
3662 83 set_bit(quest_rules,qr_OLD_SHALLOW_SFX,1);
3663 83 }
3664
3665 //always set
3666 93 set_bit(quest_rules,qr_ANIMATECUSTOMWEAPONS,0);
3667
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if (s_version < 16) set_bit(quest_rules,qr_BROKEN_HORIZONTAL_WEAPON_ANIM,1);
3668
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata==true)
3669 {
3670 93 memcpy(Header, &tempheader, sizeof(tempheader));
3671 93 }
3672 93 return 0;
3673 93 }
3674
3675 767015 void init_msgstr(MsgStr *str)
3676 {
3677 767015 str->s = "";
3678 767015 str->s.shrink_to_fit();
3679 767015 str->nextstring=0;
3680 767015 str->tile=0;
3681 767015 str->cset=0;
3682 767015 str->trans=false;
3683 767015 str->font=font_zfont;
3684 767015 str->y=32;
3685 767015 str->sfx=18;
3686 767015 str->listpos=0;
3687 767015 str->x=24;
3688 767015 str->w=get_bit(quest_rules,qr_STRING_FRAME_OLD_WIDTH_HEIGHT)!=0 ? 24*8 : 26*8;
3689 767015 str->h=get_bit(quest_rules,qr_STRING_FRAME_OLD_WIDTH_HEIGHT)!=0 ? 3*8 : 5*8;
3690 767015 str->hspace=0;
3691 767015 str->vspace=0;
3692 767015 str->stringflags=0;
3693 767015 str->margins[up] = 8;
3694 767015 str->margins[down] = 0;
3695 767015 str->margins[left] = 8;
3696 767015 str->margins[right] = 0;
3697 767015 str->portrait_tile = 0;
3698 767015 str->portrait_cset = 0;
3699 767015 str->portrait_x = 0;
3700 767015 str->portrait_y = 0;
3701 767015 str->portrait_tw = 1;
3702 767015 str->portrait_th = 1;
3703 767015 str->shadow_type = 0;
3704 767015 str->shadow_color = 0;
3705 767015 str->drawlayer = 6;
3706 767015 }
3707
3708 93 void init_msgstrings(int32_t start, int32_t end)
3709 {
3710
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if(end <= start || end-start > msg_strings_size)
3711 return;
3712
3713
2/2
✓ Branch 0 taken 761856 times.
✓ Branch 1 taken 93 times.
761949 for(int32_t i=start; i<end; i++)
3714 {
3715 761856 init_msgstr(&MsgStrings[i]);
3716 761856 MsgStrings[i].listpos=i;
3717 761856 }
3718
3719
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(start==0)
3720 {
3721 93 MsgStrings[0].s = "(None)";
3722 93 MsgStrings[0].listpos = 0;
3723 93 }
3724 93 }
3725
3726 93 int32_t readstrings(PACKFILE *f, zquestheader *Header, bool keepdata)
3727 {
3728 93 MsgStr tempMsgString;
3729
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 init_msgstr(&tempMsgString);
3730
3731 93 word temp_msg_count=0;
3732 word temp_expansion[16];
3733 93 memset(temp_expansion, 0, 16*sizeof(word));
3734 93 char buf[8193] = {0};
3735
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(Header->zelda_version < 0x193)
3736 {
3737 byte tempbyte;
3738 int32_t strings_to_read=0;
3739 set_bit(quest_rules,qr_OLD_STRING_EDITOR_MARGINS,true);
3740 if((Header->zelda_version < 0x192)||
3741 ((Header->zelda_version == 0x192)&&(Header->build<31)))
3742 {
3743 strings_to_read=128;
3744 temp_msg_count=Header->old_str_count;
3745
3746 // Some sort of string count corruption seems to be common in old quests
3747 if(temp_msg_count>128)
3748 {
3749 temp_msg_count=128;
3750 }
3751 }
3752 else if((Header->zelda_version == 0x192)&&(Header->build<140))
3753 {
3754 strings_to_read=255;
3755 temp_msg_count=Header->old_str_count;
3756 }
3757 else
3758 {
3759 if(!p_igetw(&temp_msg_count,f,true))
3760 {
3761 return qe_invalid;
3762 }
3763
3764 strings_to_read=temp_msg_count;
3765
3766 if(temp_msg_count >= msg_strings_size)
3767 {
3768 Z_message("Reallocating string buffer...\n");
3769
3770 // if((MsgStrings=(MsgStr*)_al_sane_realloc(MsgStrings,sizeof(MsgStr)*MAXMSGS))==NULL)
3771 // return qe_nomem;
3772
3773 //memset(MsgStrings, 0, sizeof(MsgStr)*MAXMSGS);
3774 delete[] MsgStrings;
3775 MsgStrings = new MsgStr[MAXMSGS];
3776 msg_strings_size = MAXMSGS;
3777 for(auto q = 0; q < msg_strings_size; ++q)
3778 {
3779 MsgStrings[q].clear();
3780 }
3781 }
3782 }
3783
3784 //reset the message strings
3785 if(keepdata)
3786 {
3787 init_msgstrings(0,msg_strings_size);
3788 }
3789
3790 for(int32_t x=0; x<strings_to_read; x++)
3791 {
3792 init_msgstr(&tempMsgString);
3793
3794 if(!pfread(buf,73,f,true))
3795 {
3796 return qe_invalid;
3797 }
3798
3799 buf[74] = '\0';
3800 tempMsgString.s = buf;
3801
3802 if(!p_getc(&tempbyte,f,true))
3803 {
3804 return qe_invalid;
3805 }
3806
3807 if((Header->zelda_version < 0x192)||
3808 ((Header->zelda_version == 0x192)&&(Header->build<148)))
3809 {
3810 tempMsgString.nextstring=tempbyte?x+1:0;
3811
3812 if(!p_getc(&tempbyte,f,true))
3813 {
3814 return qe_invalid;
3815 }
3816
3817 if(!p_getc(&tempbyte,f,true))
3818 {
3819 return qe_invalid;
3820 }
3821 }
3822 else
3823 {
3824 if(!p_igetw(&tempMsgString.nextstring,f,true))
3825 {
3826 return qe_invalid;
3827 }
3828
3829 if(!pfread(temp_expansion,32,f,true))
3830 {
3831 return qe_invalid;
3832 }
3833 }
3834
3835 if(keepdata==true)
3836 {
3837 MsgStrings[x] = tempMsgString;
3838 }
3839 }
3840 }
3841 else
3842 {
3843 int32_t dummy_int;
3844 word s_version;
3845 word s_cversion;
3846
3847 //section version info
3848
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&s_version,f,true))
3849 {
3850 return qe_invalid;
3851 }
3852
3853 93 FFCore.quest_format[vStrings] = s_version;
3854
3855
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&s_cversion,f,true))
3856 {
3857 return qe_invalid;
3858 }
3859
3860 //al_trace("Strings version %d\n", s_version);
3861 //section size
3862
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetl(&dummy_int,f,true))
3863 {
3864 return qe_invalid;
3865 }
3866
3867 //finally... section data
3868
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&temp_msg_count,f,true))
3869 {
3870 return qe_invalid;
3871 }
3872
3873
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(temp_msg_count >= msg_strings_size)
3874 {
3875 Z_message("Reallocating string buffer...\n");
3876
3877 // if((MsgStrings=(MsgStr*)_al_sane_realloc(MsgStrings,sizeof(MsgStr)*MAXMSGS))==NULL)
3878 // return qe_nomem;
3879 delete[] MsgStrings;
3880 MsgStrings = new MsgStr[MAXMSGS];
3881 msg_strings_size = MAXMSGS;
3882 for(auto q = 0; q < msg_strings_size; ++q)
3883 {
3884 MsgStrings[q].clear();
3885 }
3886 //memset(MsgStrings, 0, sizeof(MsgStr)*MAXMSGS);
3887 }
3888
3889 //reset the message strings
3890
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(keepdata)
3891 {
3892
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if(s_version < 7)
3893
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 set_bit(quest_rules,qr_OLD_STRING_EDITOR_MARGINS,true);
3894
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 init_msgstrings(0,msg_strings_size);
3895 93 }
3896
3897 93 int32_t string_length=(s_version<2)?73:145;
3898
3899
2/2
✓ Branch 0 taken 5066 times.
✓ Branch 1 taken 93 times.
5159 for(int32_t i=0; i<temp_msg_count; i++)
3900 {
3901
1/2
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
5066 init_msgstr(&tempMsgString);
3902
2/2
✓ Branch 0 taken 856 times.
✓ Branch 1 taken 4210 times.
5066 if(s_version > 8)
3903 {
3904
2/4
✓ Branch 0 taken 856 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 856 times.
✗ Branch 3 not taken.
856 if(!p_igetl(&string_length,f,true))
3905 {
3906 return qe_invalid;
3907 }
3908 856 }
3909
2/2
✓ Branch 0 taken 4928 times.
✓ Branch 1 taken 138 times.
5066 if (string_length > 0)
3910 {
3911
2/4
✓ Branch 0 taken 4928 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4928 times.
✗ Branch 3 not taken.
4928 if (!pfread(buf, string_length, f, true))
3912 {
3913 return qe_invalid;
3914 }
3915 4928 }
3916 else
3917 {
3918 138 buf[0] = 0;
3919 }
3920
3921
2/4
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5066 times.
✗ Branch 3 not taken.
5066 if(!p_igetw(&tempMsgString.nextstring,f,true))
3922 {
3923 return qe_invalid;
3924 }
3925
3926
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5066 times.
5066 if(s_version<2)
3927 {
3928 buf[72] = '\0';
3929 tempMsgString.s = buf;
3930 }
3931 else
3932 {
3933 // June 2008: A bug corrupted the last 4 chars of a string.
3934 // Discard these.
3935
1/2
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
5066 if(s_version<3)
3936 {
3937 for(int32_t j=140; j<144; j++)
3938 {
3939 buf[j] = '\0';
3940 }
3941 }
3942
1/2
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
5066 if(string_length > 8192) string_length = 8192;
3943 5066 buf[string_length]='\0'; //Force-terminate
3944
1/2
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
5066 tempMsgString.s = buf;
3945
3946
2/2
✓ Branch 0 taken 856 times.
✓ Branch 1 taken 4210 times.
5066 if ( s_version >= 6 )
3947 {
3948
2/4
✓ Branch 0 taken 856 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 856 times.
✗ Branch 3 not taken.
856 if(!p_igetl(&tempMsgString.tile,f,true))
3949 {
3950 return qe_invalid;
3951 }
3952 856 }
3953 else
3954 {
3955
2/4
✓ Branch 0 taken 4210 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4210 times.
✗ Branch 3 not taken.
4210 if(!p_igetw(&tempMsgString.tile,f,true))
3956 {
3957 return qe_invalid;
3958 }
3959 }
3960
3961
2/4
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5066 times.
✗ Branch 3 not taken.
5066 if(!p_getc(&tempMsgString.cset,f,true))
3962 {
3963 return qe_invalid;
3964 }
3965
3966 byte dummy_char;
3967
3968
2/4
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5066 times.
✗ Branch 3 not taken.
5066 if(!p_getc(&dummy_char,f,true)) // trans is stored as a char...
3969 {
3970 return qe_invalid;
3971 }
3972
3973 5066 tempMsgString.trans=dummy_char!=0;
3974
3975
2/4
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5066 times.
✗ Branch 3 not taken.
5066 if(!p_getc(&tempMsgString.font,f,true))
3976 {
3977 return qe_invalid;
3978 }
3979
3980
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5066 times.
5066 if(s_version < 5)
3981 {
3982 if(!p_getc(&tempMsgString.y,f,true))
3983 {
3984 return qe_invalid;
3985 }
3986 }
3987 else
3988 {
3989
2/4
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5066 times.
✗ Branch 3 not taken.
5066 if(!p_igetw(&tempMsgString.x,f,true))
3990 {
3991 return qe_invalid;
3992 }
3993
3994
2/4
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5066 times.
✗ Branch 3 not taken.
5066 if(!p_igetw(&tempMsgString.y,f,true))
3995 {
3996 return qe_invalid;
3997 }
3998
3999
2/4
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5066 times.
✗ Branch 3 not taken.
5066 if(!p_igetw(&tempMsgString.w,f,true))
4000 {
4001 return qe_invalid;
4002 }
4003
4004
2/4
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5066 times.
✗ Branch 3 not taken.
5066 if(!p_igetw(&tempMsgString.h,f,true))
4005 {
4006 return qe_invalid;
4007 }
4008
4009
2/4
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5066 times.
✗ Branch 3 not taken.
5066 if(!p_getc(&tempMsgString.hspace,f,true))
4010 {
4011 return qe_invalid;
4012 }
4013
4014
2/4
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5066 times.
✗ Branch 3 not taken.
5066 if(!p_getc(&tempMsgString.vspace,f,true))
4015 {
4016 return qe_invalid;
4017 }
4018
4019
2/4
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5066 times.
✗ Branch 3 not taken.
5066 if(!p_getc(&tempMsgString.stringflags,f,true))
4020 {
4021 return qe_invalid;
4022 }
4023 }
4024
4025
2/2
✓ Branch 0 taken 4210 times.
✓ Branch 1 taken 856 times.
5066 if(s_version >= 7)
4026 {
4027
2/2
✓ Branch 0 taken 856 times.
✓ Branch 1 taken 3424 times.
4280 for(int32_t q = 0; q < 4; ++q)
4028 {
4029
2/4
✓ Branch 0 taken 3424 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3424 times.
✗ Branch 3 not taken.
3424 if(!p_getc(&tempMsgString.margins[q],f,true))
4030 {
4031 return qe_invalid;
4032 }
4033 3424 }
4034
4035
2/4
✓ Branch 0 taken 856 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 856 times.
✗ Branch 3 not taken.
856 if(!p_igetl(&tempMsgString.portrait_tile,f,true))
4036 {
4037 return qe_invalid;
4038 }
4039
4040
2/4
✓ Branch 0 taken 856 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 856 times.
✗ Branch 3 not taken.
856 if(!p_getc(&tempMsgString.portrait_cset,f,true))
4041 {
4042 return qe_invalid;
4043 }
4044
4045
2/4
✓ Branch 0 taken 856 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 856 times.
✗ Branch 3 not taken.
856 if(!p_getc(&tempMsgString.portrait_x,f,true))
4046 {
4047 return qe_invalid;
4048 }
4049
4050
2/4
✓ Branch 0 taken 856 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 856 times.
✗ Branch 3 not taken.
856 if(!p_getc(&tempMsgString.portrait_y,f,true))
4051 {
4052 return qe_invalid;
4053 }
4054
4055
2/4
✓ Branch 0 taken 856 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 856 times.
✗ Branch 3 not taken.
856 if(!p_getc(&tempMsgString.portrait_tw,f,true))
4056 {
4057 return qe_invalid;
4058 }
4059
4060
2/4
✓ Branch 0 taken 856 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 856 times.
✗ Branch 3 not taken.
856 if(!p_getc(&tempMsgString.portrait_th,f,true))
4061 {
4062 return qe_invalid;
4063 }
4064 856 }
4065
4066
2/2
✓ Branch 0 taken 856 times.
✓ Branch 1 taken 4210 times.
5066 if(s_version >= 8)
4067 {
4068
2/4
✓ Branch 0 taken 856 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 856 times.
✗ Branch 3 not taken.
856 if(!p_getc(&tempMsgString.shadow_type,f,true))
4069 {
4070 return qe_invalid;
4071 }
4072
4073
2/4
✓ Branch 0 taken 856 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 856 times.
✗ Branch 3 not taken.
856 if(!p_getc(&tempMsgString.shadow_color,f,true))
4074 {
4075 return qe_invalid;
4076 }
4077 856 }
4078
4079
2/2
✓ Branch 0 taken 739 times.
✓ Branch 1 taken 4327 times.
5066 if(s_version >= 10)
4080 {
4081
2/4
✓ Branch 0 taken 739 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 739 times.
✗ Branch 3 not taken.
739 if(!p_getc(&tempMsgString.drawlayer,f,true))
4082 {
4083 return qe_invalid;
4084 }
4085 739 }
4086
4087
2/4
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5066 times.
✗ Branch 3 not taken.
5066 if(!p_getc(&tempMsgString.sfx,f,true))
4088 {
4089 return qe_invalid;
4090 }
4091
4092
1/2
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
5066 if(s_version>3)
4093 {
4094
2/4
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5066 times.
✗ Branch 3 not taken.
5066 if(!p_igetw(&tempMsgString.listpos,f,true))
4095 {
4096 return qe_invalid;
4097 }
4098 5066 }
4099 }
4100
4101
1/2
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
5066 if(keepdata==true)
4102 {
4103
1/2
✓ Branch 0 taken 5066 times.
✗ Branch 1 not taken.
5066 MsgStrings[i].copyAll(tempMsgString);
4104 5066 }
4105 5066 }
4106 }
4107
4108
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata==true)
4109 {
4110 93 msg_count=temp_msg_count;
4111 93 }
4112
4113 93 return 0;
4114 93 }
4115
4116 93 int32_t readdoorcombosets(PACKFILE *f, zquestheader *Header, bool keepdata)
4117 {
4118
1/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
93 if((Header->zelda_version < 0x192)||
4119
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ((Header->zelda_version == 0x192)&&(Header->build<158)))
4120 {
4121 return 0;
4122 }
4123
4124 93 word temp_door_combo_set_count=0;
4125 DoorComboSet tempDoorComboSet;
4126 word dummy_word;
4127 int32_t dummy_long;
4128 byte padding;
4129 93 int32_t s_version = 0;
4130
4131
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata==true)
4132 {
4133
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<MAXDOORCOMBOSETS; i++)
4134 {
4135 23808 memset(DoorComboSets+i, 0, sizeof(DoorComboSet));
4136 23808 }
4137 93 }
4138
4139
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(Header->zelda_version > 0x192)
4140 {
4141 //section version info
4142
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_version,f,true))
4143 {
4144 return qe_invalid;
4145 }
4146
4147 93 FFCore.quest_format[vDoors] = s_version;
4148
4149 //al_trace("Door combo sets version %d\n", dummy_word);
4150
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&dummy_word,f,true))
4151 {
4152 return qe_invalid;
4153 }
4154
4155 //section size
4156
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&dummy_long,f,true))
4157 {
4158 return qe_invalid;
4159 }
4160 93 }
4161
4162 //finally... section data
4163
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&temp_door_combo_set_count,f,true))
4164 {
4165 return qe_invalid;
4166 }
4167
4168
2/2
✓ Branch 0 taken 664 times.
✓ Branch 1 taken 93 times.
757 for(int32_t i=0; i<temp_door_combo_set_count; i++)
4169 {
4170 664 memset(&tempDoorComboSet, 0, sizeof(DoorComboSet));
4171
4172 //name
4173
1/2
✓ Branch 0 taken 664 times.
✗ Branch 1 not taken.
664 if(!pfread(&tempDoorComboSet.name,sizeof(tempDoorComboSet.name),f,true))
4174 {
4175 return qe_invalid;
4176 }
4177
4178
1/2
✓ Branch 0 taken 664 times.
✗ Branch 1 not taken.
664 if(Header->zelda_version < 0x193)
4179 {
4180 if(!p_getc(&padding,f,true))
4181 {
4182 return qe_invalid;
4183 }
4184 }
4185
4186 //up door
4187
2/2
✓ Branch 0 taken 5976 times.
✓ Branch 1 taken 664 times.
6640 for(int32_t j=0; j<9; j++)
4188 {
4189
2/2
✓ Branch 0 taken 23904 times.
✓ Branch 1 taken 5976 times.
29880 for(int32_t k=0; k<4; k++)
4190 {
4191
1/2
✓ Branch 0 taken 23904 times.
✗ Branch 1 not taken.
23904 if(!p_igetw(&tempDoorComboSet.doorcombo_u[j][k],f,true))
4192 {
4193 return qe_invalid;
4194 }
4195 23904 }
4196 5976 }
4197
4198
2/2
✓ Branch 0 taken 5976 times.
✓ Branch 1 taken 664 times.
6640 for(int32_t j=0; j<9; j++)
4199 {
4200
2/2
✓ Branch 0 taken 23904 times.
✓ Branch 1 taken 5976 times.
29880 for(int32_t k=0; k<4; k++)
4201 {
4202
1/2
✓ Branch 0 taken 23904 times.
✗ Branch 1 not taken.
23904 if(!p_getc(&tempDoorComboSet.doorcset_u[j][k],f,true))
4203 {
4204 return qe_invalid;
4205 }
4206 23904 }
4207 5976 }
4208
4209 //down door
4210
2/2
✓ Branch 0 taken 5976 times.
✓ Branch 1 taken 664 times.
6640 for(int32_t j=0; j<9; j++)
4211 {
4212
2/2
✓ Branch 0 taken 23904 times.
✓ Branch 1 taken 5976 times.
29880 for(int32_t k=0; k<4; k++)
4213 {
4214
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23904 times.
23904 if(!p_igetw(&tempDoorComboSet.doorcombo_d[j][k],f,true))
4215 {
4216 return qe_invalid;
4217 }
4218 23904 }
4219 5976 }
4220
4221
2/2
✓ Branch 0 taken 5976 times.
✓ Branch 1 taken 664 times.
6640 for(int32_t j=0; j<9; j++)
4222 {
4223
2/2
✓ Branch 0 taken 23904 times.
✓ Branch 1 taken 5976 times.
29880 for(int32_t k=0; k<4; k++)
4224 {
4225
1/2
✓ Branch 0 taken 23904 times.
✗ Branch 1 not taken.
23904 if(!p_getc(&tempDoorComboSet.doorcset_d[j][k],f,true))
4226 {
4227 return qe_invalid;
4228 }
4229 23904 }
4230 5976 }
4231
4232 //left door
4233
2/2
✓ Branch 0 taken 5976 times.
✓ Branch 1 taken 664 times.
6640 for(int32_t j=0; j<9; j++)
4234 {
4235
2/2
✓ Branch 0 taken 35856 times.
✓ Branch 1 taken 5976 times.
41832 for(int32_t k=0; k<6; k++)
4236 {
4237
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 35856 times.
35856 if(!p_igetw(&tempDoorComboSet.doorcombo_l[j][k],f,true))
4238 {
4239 return qe_invalid;
4240 }
4241 35856 }
4242 5976 }
4243
4244
2/2
✓ Branch 0 taken 5976 times.
✓ Branch 1 taken 664 times.
6640 for(int32_t j=0; j<9; j++)
4245 {
4246
2/2
✓ Branch 0 taken 35856 times.
✓ Branch 1 taken 5976 times.
41832 for(int32_t k=0; k<6; k++)
4247 {
4248
1/2
✓ Branch 0 taken 35856 times.
✗ Branch 1 not taken.
35856 if(!p_getc(&tempDoorComboSet.doorcset_l[j][k],f,true))
4249 {
4250 return qe_invalid;
4251 }
4252 35856 }
4253 5976 }
4254
4255 //right door
4256
2/2
✓ Branch 0 taken 5976 times.
✓ Branch 1 taken 664 times.
6640 for(int32_t j=0; j<9; j++)
4257 {
4258
2/2
✓ Branch 0 taken 35856 times.
✓ Branch 1 taken 5976 times.
41832 for(int32_t k=0; k<6; k++)
4259 {
4260
1/2
✓ Branch 0 taken 35856 times.
✗ Branch 1 not taken.
35856 if(!p_igetw(&tempDoorComboSet.doorcombo_r[j][k],f,true))
4261 {
4262 return qe_invalid;
4263 }
4264 35856 }
4265 5976 }
4266
4267
2/2
✓ Branch 0 taken 5976 times.
✓ Branch 1 taken 664 times.
6640 for(int32_t j=0; j<9; j++)
4268 {
4269
2/2
✓ Branch 0 taken 35856 times.
✓ Branch 1 taken 5976 times.
41832 for(int32_t k=0; k<6; k++)
4270 {
4271
1/2
✓ Branch 0 taken 35856 times.
✗ Branch 1 not taken.
35856 if(!p_getc(&tempDoorComboSet.doorcset_r[j][k],f,true))
4272 {
4273 return qe_invalid;
4274 }
4275 35856 }
4276 5976 }
4277
4278 //up bomb rubble
4279
2/2
✓ Branch 0 taken 1328 times.
✓ Branch 1 taken 664 times.
1992 for(int32_t j=0; j<2; j++)
4280 {
4281
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1328 times.
1328 if(!p_igetw(&tempDoorComboSet.bombdoorcombo_u[j],f,true))
4282 {
4283 return qe_invalid;
4284 }
4285 1328 }
4286
4287
2/2
✓ Branch 0 taken 1328 times.
✓ Branch 1 taken 664 times.
1992 for(int32_t j=0; j<2; j++)
4288 {
4289
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1328 times.
1328 if(!p_getc(&tempDoorComboSet.bombdoorcset_u[j],f,true))
4290 {
4291 return qe_invalid;
4292 }
4293 1328 }
4294
4295 //down bomb rubble
4296
2/2
✓ Branch 0 taken 1328 times.
✓ Branch 1 taken 664 times.
1992 for(int32_t j=0; j<2; j++)
4297 {
4298
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1328 times.
1328 if(!p_igetw(&tempDoorComboSet.bombdoorcombo_d[j],f,true))
4299 {
4300 return qe_invalid;
4301 }
4302 1328 }
4303
4304
2/2
✓ Branch 0 taken 1328 times.
✓ Branch 1 taken 664 times.
1992 for(int32_t j=0; j<2; j++)
4305 {
4306
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1328 times.
1328 if(!p_getc(&tempDoorComboSet.bombdoorcset_d[j],f,true))
4307 {
4308 return qe_invalid;
4309 }
4310 1328 }
4311
4312 //left bomb rubble
4313
2/2
✓ Branch 0 taken 1992 times.
✓ Branch 1 taken 664 times.
2656 for(int32_t j=0; j<3; j++)
4314 {
4315
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1992 times.
1992 if(!p_igetw(&tempDoorComboSet.bombdoorcombo_l[j],f,true))
4316 {
4317 return qe_invalid;
4318 }
4319 1992 }
4320
4321
2/2
✓ Branch 0 taken 1992 times.
✓ Branch 1 taken 664 times.
2656 for(int32_t j=0; j<3; j++)
4322 {
4323
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1992 times.
1992 if(!p_getc(&tempDoorComboSet.bombdoorcset_l[j],f,true))
4324 {
4325 return qe_invalid;
4326 }
4327 1992 }
4328
4329
1/2
✓ Branch 0 taken 664 times.
✗ Branch 1 not taken.
664 if(Header->zelda_version < 0x193)
4330 {
4331 if(!p_getc(&padding,f,true))
4332 {
4333 return qe_invalid;
4334 }
4335
4336 }
4337
4338 //right bomb rubble
4339
2/2
✓ Branch 0 taken 1992 times.
✓ Branch 1 taken 664 times.
2656 for(int32_t j=0; j<3; j++)
4340 {
4341
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1992 times.
1992 if(!p_igetw(&tempDoorComboSet.bombdoorcombo_r[j],f,true))
4342 {
4343 return qe_invalid;
4344 }
4345 1992 }
4346
4347
2/2
✓ Branch 0 taken 1992 times.
✓ Branch 1 taken 664 times.
2656 for(int32_t j=0; j<3; j++)
4348 {
4349
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1992 times.
1992 if(!p_getc(&tempDoorComboSet.bombdoorcset_r[j],f,true))
4350 {
4351 return qe_invalid;
4352 }
4353 1992 }
4354
4355
1/2
✓ Branch 0 taken 664 times.
✗ Branch 1 not taken.
664 if(Header->zelda_version < 0x193)
4356 {
4357 if(!p_getc(&padding,f,true))
4358 {
4359 return qe_invalid;
4360 }
4361 }
4362
4363 //walkthrough stuff
4364
2/2
✓ Branch 0 taken 2656 times.
✓ Branch 1 taken 664 times.
3320 for(int32_t j=0; j<4; j++)
4365 {
4366
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2656 times.
2656 if(!p_igetw(&tempDoorComboSet.walkthroughcombo[j],f,true))
4367 {
4368 return qe_invalid;
4369 }
4370 2656 }
4371
4372
2/2
✓ Branch 0 taken 2656 times.
✓ Branch 1 taken 664 times.
3320 for(int32_t j=0; j<4; j++)
4373 {
4374
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2656 times.
2656 if(!p_getc(&tempDoorComboSet.walkthroughcset[j],f,true))
4375 {
4376 return qe_invalid;
4377 }
4378 2656 }
4379
4380 //flags
4381
2/2
✓ Branch 0 taken 1328 times.
✓ Branch 1 taken 664 times.
1992 for(int32_t j=0; j<2; j++)
4382 {
4383
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1328 times.
1328 if(!p_getc(&tempDoorComboSet.flags[j],f,true))
4384 {
4385 return qe_invalid;
4386 }
4387 1328 }
4388
4389
1/2
✓ Branch 0 taken 664 times.
✗ Branch 1 not taken.
664 if(Header->zelda_version < 0x193)
4390 {
4391 if(!pfread(&tempDoorComboSet.expansion,sizeof(tempDoorComboSet.expansion),f,true))
4392 {
4393 return qe_invalid;
4394 }
4395 }
4396
4397
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 664 times.
664 if(keepdata==true)
4398 {
4399 664 memcpy(&DoorComboSets[i], &tempDoorComboSet, sizeof(tempDoorComboSet));
4400 664 }
4401 664 }
4402
4403
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata==true)
4404 {
4405 93 door_combo_set_count=temp_door_combo_set_count;
4406 93 }
4407
4408 93 return 0;
4409 93 }
4410
4411 int32_t count_dmaps()
4412 {
4413 int32_t i=MAXDMAPS-1;
4414 bool found=false;
4415
4416 while(i>=0 && !found)
4417 {
4418 if((DMaps[i].map!=0)||(DMaps[i].level!=0)||(DMaps[i].xoff!=0)||
4419 (DMaps[i].compass!=0)||(DMaps[i].color!=0)||(DMaps[i].midi!=0)||
4420 (DMaps[i].cont!=0)||(DMaps[i].type!=0))
4421 found=true;
4422
4423 for(int32_t j=0; j<8; j++)
4424 {
4425 if(DMaps[i].grid[j]!=0)
4426
4427 found=true;
4428 }
4429
4430 if((DMaps[i].name[0]!=0)||(DMaps[i].title[0]!=0)||
4431 (DMaps[i].intro[0]!=0)||(DMaps[i].tmusic[0]!=0))
4432 found=true;
4433
4434 if((DMaps[i].minimap_1_tile!=0)||(DMaps[i].minimap_2_tile!=0)||
4435 (DMaps[i].largemap_1_tile!=0)||(DMaps[i].largemap_2_tile!=0)||
4436 (DMaps[i].minimap_1_cset!=0)||(DMaps[i].minimap_2_cset!=0)||
4437 (DMaps[i].largemap_1_cset!=0)||(DMaps[i].largemap_2_cset!=0))
4438 found=true;
4439
4440 if(!found)
4441 {
4442 i--;
4443 }
4444 }
4445
4446 return i+1;
4447 }
4448
4449
4450 int32_t count_shops(miscQdata *Misc)
4451 {
4452 int32_t i=255,j;
4453 bool found=false;
4454
4455 while(i>=0 && !found)
4456 {
4457 j=2;
4458
4459 while(j>=0 && !found)
4460 {
4461 if((Misc->shop[i].hasitem[j]!=0)||(Misc->shop[i].price[j]!=0))
4462 {
4463 found=true;
4464 }
4465 else
4466 {
4467 j--;
4468 }
4469 }
4470
4471 if(Misc->shop[i].name[0]!=0)
4472 {
4473 found=true;
4474 }
4475
4476 if(!found)
4477 {
4478 i--;
4479 }
4480 }
4481
4482 return i+1;
4483 }
4484
4485 int32_t count_infos(miscQdata *Misc)
4486 {
4487 int32_t i=255,j;
4488 bool found=false;
4489
4490 while(i>=0 && !found)
4491 {
4492 j=2;
4493
4494 while(j>=0 && !found)
4495 {
4496 if((Misc->info[i].str[j]!=0)||(Misc->info[i].price[j]!=0))
4497 {
4498 found=true;
4499 }
4500 else
4501 {
4502 j--;
4503 }
4504 }
4505
4506 if(Misc->info[i].name[0]!=0)
4507 {
4508 found=true;
4509 }
4510
4511 if(!found)
4512 {
4513 i--;
4514 }
4515 }
4516
4517 return i+1;
4518 }
4519
4520 int32_t count_warprings(miscQdata *Misc)
4521 {
4522 int32_t i=15,j;
4523 bool found=false;
4524
4525 while(i>=0 && !found)
4526 {
4527 j=7;
4528
4529 while(j>=0 && !found)
4530 {
4531 if((Misc->warp[i].dmap[j]!=0)||(Misc->warp[i].scr[j]!=0))
4532 {
4533 found=true;
4534 }
4535 else
4536 {
4537 j--;
4538 }
4539 }
4540
4541 if(!found)
4542 {
4543 i--;
4544 }
4545 }
4546
4547 return i+1;
4548 }
4549
4550 int32_t count_palcycles(miscQdata *Misc)
4551 {
4552 int32_t i=255,j;
4553 bool found=false;
4554
4555 while(i>=0 && !found)
4556 {
4557 j=2;
4558
4559 while(j>=0 && !found)
4560 {
4561 if(Misc->cycles[i][j].count!=0)
4562 {
4563 found=true;
4564 }
4565 else
4566 {
4567 j--;
4568 }
4569 }
4570
4571 if(!found)
4572 {
4573 i--;
4574 }
4575 }
4576
4577 return i+1;
4578 }
4579
4580 140445 void clear_screen(mapscr *temp_scr)
4581 {
4582 140445 temp_scr->zero_memory();
4583 140445 }
4584
4585 93 int32_t readdmaps(PACKFILE *f, zquestheader *Header, word, word, word start_dmap, word max_dmaps, bool keepdata)
4586 {
4587 93 word dmapstoread=0;
4588 dmap tempDMap;
4589
4590 int32_t dummy;
4591 93 word s_version=0, s_cversion=0;
4592 byte padding;
4593
4594
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata==true)
4595 {
4596
2/2
✓ Branch 0 taken 47616 times.
✓ Branch 1 taken 93 times.
47709 for(int32_t i=0; i<max_dmaps; i++)
4597 {
4598 47616 memset(&DMaps[start_dmap+i],0,sizeof(dmap));
4599 47616 sprintf(DMaps[start_dmap+i].title," ");
4600 47616 sprintf(DMaps[start_dmap+i].intro," ");
4601 47616 DMaps[start_dmap+i].type |= dmCAVE;
4602 47616 }
4603 93 }
4604
4605
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!Header || Header->zelda_version > 0x192)
4606 {
4607 //section version info
4608
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_version,f,true))
4609 {
4610 return qe_invalid;
4611 }
4612
4613 93 FFCore.quest_format[vDMaps] = s_version;
4614
4615 //al_trace("DMaps version %d\n", s_version);
4616
4617
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_cversion,f,true))
4618 {
4619 return qe_invalid;
4620 }
4621
4622 //section size
4623
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&dummy,f,true))
4624 {
4625 return qe_invalid;
4626 }
4627
4628 //finally... section data
4629
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&dmapstoread,f,true))
4630 {
4631 return qe_invalid;
4632 }
4633 93 }
4634 else
4635 {
4636 if((Header->zelda_version < 0x192)||
4637 ((Header->zelda_version == 0x192)&&(Header->build<5)))
4638 {
4639 dmapstoread=32;
4640 }
4641 else if(s_version <= 4)
4642 {
4643 dmapstoread=OLDMAXDMAPS;
4644 }
4645 else
4646 {
4647 dmapstoread=MAXDMAPS;
4648 }
4649 }
4650
4651
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 dmapstoread=zc_min(dmapstoread, max_dmaps);
4652
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 dmapstoread=zc_min(dmapstoread, MAXDMAPS-start_dmap);
4653
4654
2/2
✓ Branch 0 taken 47616 times.
✓ Branch 1 taken 93 times.
47709 for(int32_t i=start_dmap; i<dmapstoread+start_dmap; i++)
4655 {
4656 47616 memset(&tempDMap,0,sizeof(dmap));
4657 47616 sprintf(tempDMap.title," ");
4658 47616 sprintf(tempDMap.intro," ");
4659
4660
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&tempDMap.map,f,keepdata))
4661 {
4662 return qe_invalid;
4663 }
4664
4665
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 47616 times.
47616 if(s_version <= 4)
4666 {
4667 byte tempbyte;
4668
4669 if(!p_getc(&tempbyte,f,keepdata))
4670 {
4671 return qe_invalid;
4672 }
4673
4674 tempDMap.level=(word)tempbyte;
4675 }
4676 else
4677 {
4678
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&tempDMap.level,f,keepdata))
4679 {
4680 return qe_invalid;
4681 }
4682 }
4683
4684
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&tempDMap.xoff,f,keepdata))
4685 {
4686 return qe_invalid;
4687 }
4688
4689
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&tempDMap.compass,f,keepdata))
4690 {
4691 return qe_invalid;
4692 }
4693
4694
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(s_version > 8) // February 2009
4695 {
4696
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&tempDMap.color,f,true))
4697 {
4698 return qe_invalid;
4699 }
4700 47616 }
4701 else
4702 {
4703 byte tempbyte;
4704
4705 if(!p_getc(&tempbyte,f,true))
4706 {
4707 return qe_invalid;
4708 }
4709
4710 tempDMap.color = (word)tempbyte;
4711 }
4712
4713
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&tempDMap.midi,f,keepdata))
4714 {
4715 return qe_invalid;
4716 }
4717
4718
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&tempDMap.cont,f,keepdata))
4719 {
4720 return qe_invalid;
4721 }
4722
4723
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&tempDMap.type,f,keepdata))
4724 {
4725 return qe_invalid;
4726 }
4727
4728
3/4
✓ Branch 0 taken 311 times.
✓ Branch 1 taken 47305 times.
✓ Branch 2 taken 311 times.
✗ Branch 3 not taken.
47927 if((tempDMap.type & dmfTYPE) == dmOVERW &&
4729
1/2
✓ Branch 0 taken 311 times.
✗ Branch 1 not taken.
311 (!Header || Header->zelda_version >= 0x210)) // Not sure exactly when this changed
4730 311 tempDMap.xoff = 0;
4731
4732
2/2
✓ Branch 0 taken 380928 times.
✓ Branch 1 taken 47616 times.
428544 for(int32_t j=0; j<8; j++)
4733 {
4734
1/2
✓ Branch 0 taken 380928 times.
✗ Branch 1 not taken.
380928 if(!p_getc(&tempDMap.grid[j],f,keepdata))
4735 {
4736 return qe_invalid;
4737 }
4738 380928 }
4739
4740
3/8
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 47616 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 47616 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
47616 if(Header && ((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<41))))
4741 {
4742 if(tempDMap.level>0&&tempDMap.level<10)
4743 {
4744 sprintf(tempDMap.title,"LEVEL-%d ", tempDMap.level);
4745 }
4746
4747 if(i==0 && Header->zelda_version <= 0x190)
4748 {
4749 tempDMap.cont-=tempDMap.xoff;
4750 tempDMap.compass-=tempDMap.xoff;
4751 }
4752
4753 //forgotten -DD
4754 if(tempDMap.level==0)
4755 {
4756 tempDMap.flags=dmfCAVES|dmf3STAIR|dmfWHIRLWIND|dmfGUYCAVES;
4757 }
4758 }
4759 else
4760 {
4761
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!pfread(&tempDMap.name,sizeof(DMaps[0].name),f,true))
4762 {
4763 return qe_invalid;
4764 }
4765
4766
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!pfread(&tempDMap.title,sizeof(DMaps[0].title),f,true))
4767 {
4768 return qe_invalid;
4769 }
4770
4771
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!pfread(&tempDMap.intro,sizeof(DMaps[0].intro),f,true))
4772 {
4773 return qe_invalid;
4774 }
4775
4776
3/8
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 47616 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 47616 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
47616 if(Header && ((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<152))))
4777 {
4778 if ((tempDMap.type & dmfTYPE) == dmOVERW) tempDMap.flags = dmfCAVES | dmf3STAIR | dmfWHIRLWIND | dmfGUYCAVES;
4779 if(keepdata==true)
4780 {
4781 memcpy(&DMaps[i], &tempDMap, sizeof(tempDMap));
4782 }
4783
4784 continue;
4785 }
4786
4787
2/4
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 47616 times.
✗ Branch 3 not taken.
47616 if(Header && (Header->zelda_version < 0x193))
4788 {
4789 if(!p_getc(&padding,f,keepdata))
4790 {
4791 return qe_invalid;
4792 }
4793 }
4794
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if ( s_version >= 11 )
4795 {
4796
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&tempDMap.minimap_1_tile,f,keepdata))
4797 {
4798 return qe_invalid;
4799 }
4800 10240 }
4801 else
4802 {
4803
1/2
✓ Branch 0 taken 37376 times.
✗ Branch 1 not taken.
37376 if(!p_igetw(&tempDMap.minimap_1_tile,f,keepdata))
4804 {
4805 return qe_invalid;
4806 }
4807 }
4808
4809
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&tempDMap.minimap_1_cset,f,keepdata))
4810 {
4811 return qe_invalid;
4812 }
4813
4814
2/4
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 47616 times.
✗ Branch 3 not taken.
47616 if(Header && (Header->zelda_version < 0x193))
4815 {
4816 if(!p_getc(&padding,f,keepdata))
4817 {
4818 return qe_invalid;
4819 }
4820 }
4821
4822
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if ( s_version >= 11 )
4823 {
4824
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&tempDMap.minimap_2_tile,f,keepdata))
4825 {
4826 return qe_invalid;
4827 }
4828 10240 }
4829 else
4830 {
4831
1/2
✓ Branch 0 taken 37376 times.
✗ Branch 1 not taken.
37376 if(!p_igetw(&tempDMap.minimap_2_tile,f,keepdata))
4832 {
4833 return qe_invalid;
4834 }
4835 }
4836
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&tempDMap.minimap_2_cset,f,keepdata))
4837 {
4838 return qe_invalid;
4839 }
4840
4841
2/4
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 47616 times.
✗ Branch 3 not taken.
47616 if(Header && (Header->zelda_version < 0x193))
4842 {
4843 if(!p_getc(&padding,f,keepdata))
4844 {
4845 return qe_invalid;
4846 }
4847 }
4848
4849
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if ( s_version >= 11 )
4850 {
4851
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&tempDMap.largemap_1_tile,f,keepdata))
4852 {
4853 return qe_invalid;
4854 }
4855 10240 }
4856 else
4857 {
4858
1/2
✓ Branch 0 taken 37376 times.
✗ Branch 1 not taken.
37376 if(!p_igetw(&tempDMap.largemap_1_tile,f,keepdata))
4859 {
4860 return qe_invalid;
4861 }
4862 }
4863
4864
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&tempDMap.largemap_1_cset,f,keepdata))
4865 {
4866 return qe_invalid;
4867 }
4868
4869
2/4
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 47616 times.
✗ Branch 3 not taken.
47616 if(Header && (Header->zelda_version < 0x193))
4870 {
4871
4872 if(!p_getc(&padding,f,keepdata))
4873 {
4874 return qe_invalid;
4875 }
4876 }
4877
4878
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if ( s_version >= 11 )
4879 {
4880
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&tempDMap.largemap_2_tile,f,keepdata))
4881 {
4882 return qe_invalid;
4883 }
4884 10240 }
4885 else
4886 {
4887
1/2
✓ Branch 0 taken 37376 times.
✗ Branch 1 not taken.
37376 if(!p_igetw(&tempDMap.largemap_2_tile,f,keepdata))
4888 {
4889 return qe_invalid;
4890 }
4891 }
4892
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&tempDMap.largemap_2_cset,f,keepdata))
4893 {
4894 return qe_invalid;
4895 }
4896
4897
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!pfread(&tempDMap.tmusic,sizeof(DMaps[0].tmusic),f,true))
4898 {
4899 return qe_invalid;
4900 }
4901 }
4902
4903
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 47616 times.
47616 if(s_version>1)
4904 {
4905
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&tempDMap.tmusictrack,f,keepdata))
4906 {
4907 return qe_invalid;
4908 }
4909
4910
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&tempDMap.active_subscreen,f,keepdata))
4911 {
4912 return qe_invalid;
4913 }
4914
4915
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&tempDMap.passive_subscreen,f,keepdata))
4916 {
4917 return qe_invalid;
4918 }
4919 47616 }
4920
4921
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 47616 times.
47616 if(s_version>2)
4922 {
4923 byte di[32];
4924
4925
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!pfread(&di, 32, f, true)) return qe_invalid;
4926
4927
2/2
✓ Branch 0 taken 12189696 times.
✓ Branch 1 taken 47616 times.
12237312 for(int32_t j=0; j<MAXITEMS; j++)
4928 {
4929
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12189696 times.
12189696 if(di[j/8] & (1 << (j%8))) tempDMap.disableditems[j]=1;
4930 12189696 else tempDMap.disableditems[j]=0;
4931 12189696 }
4932 47616 }
4933
4934
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(s_version >= 6)
4935 {
4936
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetl(&tempDMap.flags,f,keepdata))
4937 {
4938 return qe_invalid;
4939 }
4940 47616 }
4941 else if(s_version>3)
4942 {
4943 char temp;
4944
4945 if(!p_getc(&temp,f,keepdata))
4946 {
4947 return qe_invalid;
4948 }
4949
4950 tempDMap.flags = temp;
4951 }
4952 else if(tempDMap.level==0 && ((Header->zelda_version < 0x211) || ((Header->zelda_version == 0x211) && (Header->build<18))))
4953 {
4954 tempDMap.flags=dmfCAVES|dmf3STAIR|dmfWHIRLWIND|dmfGUYCAVES;
4955 }
4956 else
4957 tempDMap.flags=0;
4958
4959
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(s_version<7)
4960 {
4961 if(tempDMap.level==0 && get_bit(deprecated_rules,14))
4962 tempDMap.flags|= dmfVIEWMAP;
4963 }
4964
4965
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(s_version<8)
4966 {
4967 if(tempDMap.level==0 && (tempDMap.type&dmfTYPE)==dmDNGN)
4968 {
4969 tempDMap.type &= ~dmDNGN;
4970 tempDMap.type |= dmCAVE;
4971 }
4972 else if((tempDMap.type&dmfTYPE)==dmCAVE)
4973 {
4974 tempDMap.flags |= dmfMINIMAPCOLORFIX;
4975 }
4976 }
4977
4978
3/8
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 47616 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 47616 times.
✗ Branch 7 not taken.
47616 if(Header && ((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>=41)))
4979 47616 && (Header->zelda_version < 0x193))
4980 {
4981 if(!p_getc(&padding,f,keepdata))
4982 {
4983 return qe_invalid;
4984 }
4985 }
4986
4987
2/2
✓ Branch 0 taken 37376 times.
✓ Branch 1 taken 10240 times.
47616 if(s_version >= 10)
4988 {
4989
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_getc(&tempDMap.sideview,f,keepdata))
4990 {
4991 return qe_invalid;
4992 }
4993 10240 }
4994
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if(s_version < 10) tempDMap.sideview = 0;
4995
4996 //Dmap Scripts
4997
2/2
✓ Branch 0 taken 37376 times.
✓ Branch 1 taken 10240 times.
47616 if(s_version >= 12)
4998 {
4999
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetw(&tempDMap.script,f,keepdata))
5000 {
5001 return qe_invalid;
5002 }
5003
2/2
✓ Branch 0 taken 81920 times.
✓ Branch 1 taken 10240 times.
92160 for ( int32_t q = 0; q < 8; q++ )
5004 {
5005
1/2
✓ Branch 0 taken 81920 times.
✗ Branch 1 not taken.
81920 if(!p_igetl(&tempDMap.initD[q],f,keepdata))
5006 {
5007 return qe_invalid;
5008 }
5009 81920 }
5010 10240 }
5011
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if ( s_version < 12 )
5012 {
5013 37376 tempDMap.script = 0;
5014
2/2
✓ Branch 0 taken 299008 times.
✓ Branch 1 taken 37376 times.
336384 for ( int32_t q = 0; q < 8; q++ )
5015 {
5016 299008 tempDMap.initD[q] = 0;
5017 299008 }
5018 37376 }
5019
5020
2/2
✓ Branch 0 taken 37376 times.
✓ Branch 1 taken 10240 times.
47616 if(s_version >= 13)
5021 {
5022
2/2
✓ Branch 0 taken 81920 times.
✓ Branch 1 taken 10240 times.
92160 for ( int32_t q = 0; q < 8; q++ )
5023 {
5024
2/2
✓ Branch 0 taken 5324800 times.
✓ Branch 1 taken 81920 times.
5406720 for ( int32_t w = 0; w < 65; w++ )
5025 {
5026
1/2
✓ Branch 0 taken 5324800 times.
✗ Branch 1 not taken.
5324800 if(!p_getc(&tempDMap.initD_label[q][w],f,keepdata))
5027 {
5028 return qe_invalid;
5029 }
5030 5324800 }
5031 81920 }
5032 10240 }
5033
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if ( s_version < 13 )
5034 {
5035 37376 tempDMap.script = 0;
5036
2/2
✓ Branch 0 taken 299008 times.
✓ Branch 1 taken 37376 times.
336384 for ( int32_t q = 0; q < 8; q++ )
5037 {
5038
2/2
✓ Branch 0 taken 19435520 times.
✓ Branch 1 taken 299008 times.
19734528 for ( int32_t w = 0; w < 65; w++ )
5039 19435520 tempDMap.initD_label[q][w] = 0;
5040 299008 }
5041 37376 }
5042
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if(s_version >= 14)
5043 {
5044
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetw(&tempDMap.active_sub_script,f,keepdata))
5045 {
5046 return qe_invalid;
5047 }
5048
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetw(&tempDMap.passive_sub_script,f,keepdata))
5049 {
5050 return qe_invalid;
5051 }
5052
2/2
✓ Branch 0 taken 81920 times.
✓ Branch 1 taken 10240 times.
92160 for ( int32_t q = 0; q < 8; ++q )
5053 {
5054
1/2
✓ Branch 0 taken 81920 times.
✗ Branch 1 not taken.
81920 if(!p_igetl(&tempDMap.sub_initD[q],f,keepdata))
5055 {
5056 return qe_invalid;
5057 }
5058 81920 }
5059
2/2
✓ Branch 0 taken 81920 times.
✓ Branch 1 taken 10240 times.
92160 for(int32_t q = 0; q < 8; ++q)
5060 {
5061
2/2
✓ Branch 0 taken 5324800 times.
✓ Branch 1 taken 81920 times.
5406720 for ( int32_t w = 0; w < 65; ++w )
5062 {
5063
1/2
✓ Branch 0 taken 5324800 times.
✗ Branch 1 not taken.
5324800 if(!p_getc(&tempDMap.sub_initD_label[q][w],f,keepdata))
5064 {
5065 return qe_invalid;
5066 }
5067 5324800 }
5068 81920 }
5069 10240 }
5070 else
5071 {
5072 37376 tempDMap.active_sub_script = 0;
5073 37376 tempDMap.passive_sub_script = 0;
5074
2/2
✓ Branch 0 taken 299008 times.
✓ Branch 1 taken 37376 times.
336384 for(int32_t q = 0; q < 8; ++q)
5075 {
5076 299008 tempDMap.sub_initD[q] = 0;
5077
2/2
✓ Branch 0 taken 19435520 times.
✓ Branch 1 taken 299008 times.
19734528 for(int32_t w = 0; w < 65; ++w)
5078 19435520 tempDMap.sub_initD_label[q][w] = 0;
5079 299008 }
5080 }
5081
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if(s_version >= 15)
5082 {
5083
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetw(&tempDMap.onmap_script,f,keepdata))
5084 {
5085 return qe_invalid;
5086 }
5087
2/2
✓ Branch 0 taken 81920 times.
✓ Branch 1 taken 10240 times.
92160 for ( int32_t q = 0; q < 8; ++q )
5088 {
5089
1/2
✓ Branch 0 taken 81920 times.
✗ Branch 1 not taken.
81920 if(!p_igetl(&tempDMap.onmap_initD[q],f,keepdata))
5090 {
5091 return qe_invalid;
5092 }
5093 81920 }
5094
2/2
✓ Branch 0 taken 81920 times.
✓ Branch 1 taken 10240 times.
92160 for(int32_t q = 0; q < 8; ++q)
5095 {
5096
2/2
✓ Branch 0 taken 5324800 times.
✓ Branch 1 taken 81920 times.
5406720 for ( int32_t w = 0; w < 65; ++w )
5097 {
5098
1/2
✓ Branch 0 taken 5324800 times.
✗ Branch 1 not taken.
5324800 if(!p_getc(&tempDMap.onmap_initD_label[q][w],f,keepdata))
5099 {
5100 return qe_invalid;
5101 }
5102 5324800 }
5103 81920 }
5104 10240 }
5105 else
5106 {
5107 37376 tempDMap.onmap_script = 0;
5108
2/2
✓ Branch 0 taken 299008 times.
✓ Branch 1 taken 37376 times.
336384 for(int32_t q = 0; q < 8; ++q)
5109 {
5110 299008 tempDMap.onmap_initD[q] = 0;
5111
2/2
✓ Branch 0 taken 19435520 times.
✓ Branch 1 taken 299008 times.
19734528 for(int32_t w = 0; w < 65; ++w)
5112 {
5113 19435520 tempDMap.onmap_initD_label[q][w] = 0;
5114 19435520 }
5115 299008 }
5116 }
5117
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if(s_version >= 16)
5118 {
5119
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10240 times.
10240 if(!p_igetw(&tempDMap.mirrorDMap,f,keepdata))
5120 {
5121 return qe_invalid;
5122 }
5123 10240 }
5124 else
5125 {
5126 37376 tempDMap.mirrorDMap = -1;
5127 }
5128
5129
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 47616 times.
47616 if(keepdata==true)
5130 {
5131 47616 memcpy(&DMaps[i], &tempDMap, sizeof(tempDMap));
5132 47616 }
5133 47616 }
5134
5135 93 return 0;
5136 93 }
5137
5138 93 int32_t readmisccolors(PACKFILE *f, zquestheader *Header, miscQdata *Misc, bool keepdata)
5139 {
5140 //these are here to bypass compiler warnings about unused arguments
5141 93 Header=Header;
5142
5143 miscQdata temp_misc;
5144 93 word s_version=0, s_cversion=0;
5145 93 int32_t tempsize=0;
5146 word dummyw;
5147
5148 93 memcpy(&temp_misc,Misc,sizeof(temp_misc));
5149
5150 //section version info
5151
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(!p_igetw(&s_version,f,true))
5152 {
5153 return qe_invalid;
5154 }
5155
5156 93 FFCore.quest_format[vColours] = s_version;
5157
5158 93 al_trace("Misc Colours section version: %d\n", s_version);
5159
5160 //al_trace("Misc. colors version %d\n", s_version);
5161
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_cversion,f,true))
5162 {
5163 return qe_invalid;
5164 }
5165
5166
5167 //section size
5168
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&tempsize,f,true))
5169 {
5170 return qe_invalid;
5171 }
5172
5173 //finally... section data
5174 93 readsize=0;
5175
5176
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.text,f,true))
5177 {
5178 return qe_invalid;
5179 }
5180
5181
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.caption,f,true))
5182 {
5183 return qe_invalid;
5184 }
5185
5186
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.overw_bg,f,true))
5187 {
5188 return qe_invalid;
5189 }
5190
5191
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.dngn_bg,f,true))
5192 {
5193 return qe_invalid;
5194 }
5195
5196
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.dngn_fg,f,true))
5197 {
5198 return qe_invalid;
5199 }
5200
5201
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.cave_fg,f,true))
5202 {
5203 return qe_invalid;
5204 }
5205
5206
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.bs_dk,f,true))
5207 {
5208 return qe_invalid;
5209 }
5210
5211
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.bs_goal,f,true))
5212 {
5213 return qe_invalid;
5214 }
5215
5216
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.compass_lt,f,true))
5217 {
5218 return qe_invalid;
5219 }
5220
5221
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.compass_dk,f,true))
5222 {
5223 return qe_invalid;
5224 }
5225
5226
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.subscr_bg,f,true))
5227 {
5228 return qe_invalid;
5229 }
5230
5231
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.triframe_color,f,true))
5232 {
5233 return qe_invalid;
5234 }
5235
5236
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.hero_dot,f,true))
5237 {
5238 return qe_invalid;
5239 }
5240
5241
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.bmap_bg,f,true))
5242 {
5243 return qe_invalid;
5244 }
5245
5246
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.bmap_fg,f,true))
5247 {
5248 return qe_invalid;
5249 }
5250
5251
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.triforce_cset,f,true))
5252 {
5253 return qe_invalid;
5254 }
5255
5256
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.triframe_cset,f,true))
5257 {
5258 return qe_invalid;
5259 }
5260
5261
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.overworld_map_cset,f,true))
5262 {
5263 return qe_invalid;
5264 }
5265
5266
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.dungeon_map_cset,f,true))
5267 {
5268 return qe_invalid;
5269 }
5270
5271
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.blueframe_cset,f,true))
5272 {
5273 return qe_invalid;
5274 }
5275
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(s_version < 4)
5276 {
5277
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 if(!p_igetw(&dummyw,f,true))
5278 return qe_invalid;
5279 73 temp_misc.colors.triforce_tile = dummyw;
5280
5281
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 if(!p_igetw(&dummyw,f,true))
5282 return qe_invalid;
5283 73 temp_misc.colors.triframe_tile = dummyw;
5284
5285
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 if(!p_igetw(&dummyw,f,true))
5286 return qe_invalid;
5287 73 temp_misc.colors.overworld_map_tile = dummyw;
5288
5289
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 if(!p_igetw(&dummyw,f,true))
5290 return qe_invalid;
5291 73 temp_misc.colors.dungeon_map_tile = dummyw;
5292
5293
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 if(!p_igetw(&dummyw,f,true))
5294 return qe_invalid;
5295 73 temp_misc.colors.blueframe_tile = dummyw;
5296
5297
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 if(!p_igetw(&dummyw,f,true))
5298 return qe_invalid;
5299 73 temp_misc.colors.HCpieces_tile = dummyw;
5300 73 }
5301
5302
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.HCpieces_cset,f,true))
5303 {
5304 return qe_invalid;
5305 }
5306
5307
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.subscr_shadow,f,true))
5308 {
5309 return qe_invalid;
5310 }
5311
5312
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(s_version < 2)
5313 {
5314 temp_misc.colors.msgtext = 0x01;
5315 }
5316 else
5317 {
5318
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_getc(&temp_misc.colors.msgtext, f, true))
5319 {
5320 return qe_invalid;
5321 }
5322 }
5323
5324
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if ( s_version >= 3 ) //expanded tile pages to 825
5325 {
5326
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(!p_igetl(&temp_misc.colors.triforce_tile,f,true))
5327 {
5328 return qe_invalid;
5329 }
5330
5331
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(!p_igetl(&temp_misc.colors.triframe_tile,f,true))
5332 {
5333 return qe_invalid;
5334 }
5335
5336
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(!p_igetl(&temp_misc.colors.overworld_map_tile,f,true))
5337 {
5338 return qe_invalid;
5339 }
5340
5341
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(!p_igetl(&temp_misc.colors.dungeon_map_tile,f,true))
5342 {
5343 return qe_invalid;
5344 }
5345
5346
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(!p_igetl(&temp_misc.colors.blueframe_tile,f,true))
5347 {
5348 return qe_invalid;
5349 }
5350
5351
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
20 if(!p_igetl(&temp_misc.colors.HCpieces_tile,f,true))
5352 {
5353 return qe_invalid;
5354 }
5355 20 }
5356
5357
5358
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata==true)
5359 {
5360 93 memcpy(Misc, &temp_misc, sizeof(temp_misc));
5361 93 }
5362
5363 93 return 0;
5364 93 }
5365
5366 93 int32_t readgameicons(PACKFILE *f, zquestheader *, miscQdata *Misc, bool keepdata)
5367 {
5368 miscQdata temp_misc;
5369 93 word s_version=0, s_cversion=0;
5370 byte icons;
5371 93 int32_t tempsize=0;
5372
5373 93 memcpy(&temp_misc,Misc,sizeof(temp_misc));
5374
5375 //section version info
5376
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(!p_igetw(&s_version,f,true))
5377 {
5378 return qe_invalid;
5379 }
5380
5381 93 FFCore.quest_format[vIcons] = s_version;
5382
5383 //al_trace("Game icons version %d\n", s_version);
5384
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_cversion,f,true))
5385 {
5386 return qe_invalid;
5387 }
5388
5389
5390 //section size
5391
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&tempsize,f,true))
5392 {
5393 return qe_invalid;
5394 }
5395
5396 //finally... section data
5397 93 readsize=0;
5398
5399 93 icons=4;
5400
5401
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if ( s_version >= 10 )
5402 {
5403
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t i=0; i<icons; i++)
5404 {
5405
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_igetl(&temp_misc.icons[i],f,true))
5406 {
5407 return qe_invalid;
5408 }
5409 80 }
5410 20 }
5411 else
5412 {
5413
2/2
✓ Branch 0 taken 292 times.
✓ Branch 1 taken 73 times.
365 for(int32_t i=0; i<icons; i++)
5414 {
5415
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 292 times.
292 if(!p_igetw(&temp_misc.icons[i],f,true))
5416 {
5417 return qe_invalid;
5418 }
5419 292 }
5420 }
5421
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata==true)
5422 {
5423 93 memcpy(Misc, &temp_misc, sizeof(temp_misc));
5424 93 }
5425
5426 93 return 0;
5427 93 }
5428
5429 93 int32_t readmisc(PACKFILE *f, zquestheader *Header, miscQdata *Misc, bool keepdata)
5430 {
5431 93 word maxinfos=256;
5432 93 word maxshops=256;
5433 93 word shops=16, infos=16, warprings=8, palcycles=256, windwarps=9, triforces=8, icons=4;
5434 93 word ponds=16, pondsize=72, expansionsize=98*2;
5435 byte tempbyte, padding;
5436 miscQdata temp_misc;
5437 93 word s_version=0, s_cversion=0;
5438 word swaptmp;
5439 93 int32_t tempsize=0;
5440
5441 93 memcpy(&temp_misc,Misc,sizeof(temp_misc));
5442
5443
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<maxshops; ++i)
5444 {
5445 23808 memset(&temp_misc.shop, 0, sizeof(shoptype)*256);
5446 23808 }
5447
5448
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<maxinfos; ++i)
5449 {
5450 23808 memset(&temp_misc.info, 0, sizeof(infotype)*256);
5451 23808 }
5452
5453
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(Header->zelda_version > 0x192)
5454 {
5455 //section version info
5456
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_version,f,true))
5457 {
5458 return qe_invalid;
5459 }
5460
5461 93 FFCore.quest_format[vMisc] = s_version;
5462
5463 //al_trace("Misc. data version %d\n", s_version);
5464
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_cversion,f,true))
5465 {
5466 return qe_invalid;
5467 }
5468
5469
5470 //section size
5471
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&tempsize,f,true))
5472 {
5473 return qe_invalid;
5474 }
5475 93 }
5476
5477 //finally... section data
5478 93 readsize=0;
5479
5480 //shops
5481
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(Header->zelda_version > 0x192)
5482 {
5483
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&shops,f,true))
5484 {
5485 return qe_invalid;
5486 }
5487 93 }
5488
5489
2/2
✓ Branch 0 taken 930 times.
✓ Branch 1 taken 93 times.
1023 for(int32_t i=0; i<shops; i++)
5490 {
5491
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 930 times.
930 if(s_version > 6)
5492 {
5493
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 930 times.
930 if(!pfread(temp_misc.shop[i].name,sizeof(temp_misc.shop[i].name),f,true))
5494 {
5495 return qe_invalid;
5496 }
5497 930 }
5498
5499
2/2
✓ Branch 0 taken 2790 times.
✓ Branch 1 taken 930 times.
3720 for(int32_t j=0; j<3; j++)
5500 {
5501
1/2
✓ Branch 0 taken 2790 times.
✗ Branch 1 not taken.
2790 if(!p_getc(&temp_misc.shop[i].item[j],f,true))
5502 {
5503 return qe_invalid;
5504 }
5505
5506
1/2
✓ Branch 0 taken 2790 times.
✗ Branch 1 not taken.
2790 if(s_version < 4)
5507 {
5508 temp_misc.shop[i].hasitem[j] = (temp_misc.shop[i].item[j] == 0) ? 0 : 1;
5509 }
5510 2790 }
5511
5512
1/2
✓ Branch 0 taken 930 times.
✗ Branch 1 not taken.
930 if(Header->zelda_version < 0x193)
5513 {
5514 if(!p_getc(&tempbyte,f,true))
5515 {
5516 return qe_invalid;
5517 }
5518 }
5519
5520
2/2
✓ Branch 0 taken 2790 times.
✓ Branch 1 taken 930 times.
3720 for(int32_t j=0; j<3; j++)
5521 {
5522
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2790 times.
2790 if(!p_igetw(&temp_misc.shop[i].price[j],f,true))
5523 {
5524 return qe_invalid;
5525 }
5526 2790 }
5527
5528
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 930 times.
930 if(s_version > 3)
5529 {
5530
2/2
✓ Branch 0 taken 2790 times.
✓ Branch 1 taken 930 times.
3720 for(int32_t j=0; j<3; j++)
5531 {
5532
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2790 times.
2790 if(!p_getc(&temp_misc.shop[i].hasitem[j],f,true))
5533 return qe_invalid;
5534 2790 }
5535 930 }
5536
5537 /*
5538 if(s_version < 8)
5539 {
5540 for(int32_t j=0; j<3; j++)
5541 {
5542 (&temp_misc.shop[i].str[j])=0; //initialise.
5543 }
5544 }
5545 */
5546 930 }
5547
5548 //filter all the 0 items to the end (yeah, bubble sort; sue me)
5549
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<maxshops; ++i)
5550 {
5551
2/2
✓ Branch 0 taken 47616 times.
✓ Branch 1 taken 23808 times.
71424 for(int32_t j=0; j<3-1; j++)
5552 {
5553
2/2
✓ Branch 0 taken 71424 times.
✓ Branch 1 taken 47616 times.
119040 for(int32_t k=0; k<2-j; k++)
5554 {
5555
2/2
✓ Branch 0 taken 2032 times.
✓ Branch 1 taken 69392 times.
71424 if(temp_misc.shop[i].hasitem[k]==0)
5556 {
5557 69392 swaptmp = temp_misc.shop[i].item[k];
5558 69392 temp_misc.shop[i].item[k] = temp_misc.shop[i].item[k+1];
5559 69392 temp_misc.shop[i].item[k+1] = swaptmp;
5560 69392 swaptmp = temp_misc.shop[i].price[k];
5561 69392 temp_misc.shop[i].price[k] = temp_misc.shop[i].price[k+1];
5562 69392 temp_misc.shop[i].price[k+1] = swaptmp;
5563 69392 swaptmp = temp_misc.shop[i].hasitem[k];
5564 69392 temp_misc.shop[i].hasitem[k] = temp_misc.shop[i].hasitem[k+1];
5565 69392 temp_misc.shop[i].hasitem[k+1] = swaptmp;
5566 69392 }
5567 71424 }
5568 47616 }
5569 23808 }
5570
5571 //infos
5572
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(Header->zelda_version > 0x192)
5573 {
5574
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&infos,f,true))
5575 {
5576 return qe_invalid;
5577 }
5578 93 }
5579
5580
2/2
✓ Branch 0 taken 1376 times.
✓ Branch 1 taken 93 times.
1469 for(int32_t i=0; i<infos; i++)
5581 {
5582
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1376 times.
1376 if(s_version > 6)
5583 {
5584
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1376 times.
1376 if(!pfread(temp_misc.info[i].name,sizeof(temp_misc.info[i].name),f,true))
5585 {
5586 return qe_invalid;
5587 }
5588 1376 }
5589
5590
2/2
✓ Branch 0 taken 4128 times.
✓ Branch 1 taken 1376 times.
5504 for(int32_t j=0; j<3; j++)
5591 {
5592
1/4
✓ Branch 0 taken 4128 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
4128 if((Header->zelda_version < 0x192)||
5593
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4128 times.
4128 ((Header->zelda_version == 0x192)&&(Header->build<146)))
5594 {
5595 if(!p_getc(&tempbyte,f,true))
5596 {
5597 return qe_invalid;
5598 }
5599
5600 temp_misc.info[i].str[j]=tempbyte;
5601 }
5602 else
5603 {
5604
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4128 times.
4128 if(!p_igetw(&temp_misc.info[i].str[j],f,true))
5605 {
5606 return qe_invalid;
5607 }
5608 }
5609 4128 }
5610
5611
1/2
✓ Branch 0 taken 1376 times.
✗ Branch 1 not taken.
1376 if(Header->zelda_version < 0x193)
5612 {
5613 if(!p_getc(&tempbyte,f,true))
5614 {
5615 return qe_invalid;
5616 }
5617 }
5618
5619
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 1376 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1376 if((Header->zelda_version == 0x192)&&(Header->build>145))
5620 {
5621 if(!p_getc(&padding,f,true))
5622 {
5623 return qe_invalid;
5624 }
5625 }
5626
5627
2/2
✓ Branch 0 taken 4128 times.
✓ Branch 1 taken 1376 times.
5504 for(int32_t j=0; j<3; j++)
5628 {
5629
1/2
✓ Branch 0 taken 4128 times.
✗ Branch 1 not taken.
4128 if(!p_igetw(&temp_misc.info[i].price[j],f,true))
5630 {
5631 return qe_invalid;
5632 }
5633 4128 }
5634 1376 }
5635
5636 //filter all the 0 strings to the end (yeah, bubble sort; sue me)
5637
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<maxinfos; ++i)
5638 {
5639
2/2
✓ Branch 0 taken 47616 times.
✓ Branch 1 taken 23808 times.
71424 for(int32_t j=0; j<3-1; j++)
5640 {
5641
2/2
✓ Branch 0 taken 71424 times.
✓ Branch 1 taken 47616 times.
119040 for(int32_t k=0; k<2-j; k++)
5642 {
5643
2/2
✓ Branch 0 taken 1647 times.
✓ Branch 1 taken 69777 times.
71424 if(temp_misc.info[i].str[k]==0)
5644 {
5645 69777 swaptmp = temp_misc.info[i].str[k];
5646 69777 temp_misc.info[i].str[k] = temp_misc.info[i].str[k+1];
5647 69777 temp_misc.info[i].str[k+1] = swaptmp;
5648 69777 swaptmp = temp_misc.info[i].price[k];
5649 69777 temp_misc.info[i].price[k] = temp_misc.info[i].price[k+1];
5650 69777 temp_misc.info[i].price[k+1] = swaptmp;
5651 69777 }
5652 71424 }
5653 47616 }
5654 23808 }
5655
5656
5657 //warp rings
5658
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(s_version > 5)
5659 93 warprings++;
5660
5661
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(Header->zelda_version > 0x192)
5662 {
5663
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&warprings,f,true))
5664 {
5665 return qe_invalid;
5666 }
5667 93 }
5668
5669
2/2
✓ Branch 0 taken 883 times.
✓ Branch 1 taken 93 times.
976 for(int32_t i=0; i<warprings; i++)
5670 {
5671
2/2
✓ Branch 0 taken 7947 times.
✓ Branch 1 taken 883 times.
8830 for(int32_t j=0; j<8+((s_version > 5)?1:0); j++)
5672 {
5673
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 7947 times.
7947 if(s_version <= 3)
5674 {
5675 if(!p_getc(&tempbyte,f,true))
5676 {
5677 return qe_invalid;
5678 }
5679
5680 temp_misc.warp[i].dmap[j]=(word)tempbyte;
5681 }
5682 else
5683 {
5684
1/2
✓ Branch 0 taken 7947 times.
✗ Branch 1 not taken.
7947 if(!p_igetw(&temp_misc.warp[i].dmap[j],f,true))
5685 {
5686 return qe_invalid;
5687 }
5688 }
5689 7947 }
5690
5691
2/2
✓ Branch 0 taken 7947 times.
✓ Branch 1 taken 883 times.
8830 for(int32_t j=0; j<8+((s_version > 5)?1:0); j++)
5692 {
5693
1/2
✓ Branch 0 taken 7947 times.
✗ Branch 1 not taken.
7947 if(!p_getc(&temp_misc.warp[i].scr[j],f,true))
5694 {
5695 return qe_invalid;
5696 }
5697 7947 }
5698
5699
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 883 times.
883 if(!p_getc(&temp_misc.warp[i].size,f,true))
5700 {
5701 return qe_invalid;
5702 }
5703
5704
1/2
✓ Branch 0 taken 883 times.
✗ Branch 1 not taken.
883 if(Header->zelda_version < 0x193)
5705 {
5706 if(!p_getc(&tempbyte,f,true))
5707 {
5708 return qe_invalid;
5709 }
5710 }
5711 883 }
5712
5713 //palette cycles
5714
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(Header->zelda_version < 0x193) //in 1.93+, palette cycling is saved with the palettes
5715 {
5716 for(int32_t i=0; i<256; i++)
5717 {
5718 for(int32_t j=0; j<3; j++)
5719 {
5720 temp_misc.cycles[i][j].first=0;
5721 temp_misc.cycles[i][j].count=0;
5722 temp_misc.cycles[i][j].speed=0;
5723 }
5724 }
5725
5726 if((Header->zelda_version < 0x192)||
5727 ((Header->zelda_version == 0x192)&&(Header->build<73)))
5728 {
5729 palcycles=16;
5730 }
5731
5732 for(int32_t i=0; i<palcycles; i++)
5733 {
5734 for(int32_t j=0; j<3; j++)
5735 {
5736 if(!p_getc(&temp_misc.cycles[i][j].first,f,true))
5737 {
5738 return qe_invalid;
5739 }
5740
5741 if(!p_getc(&temp_misc.cycles[i][j].count,f,true))
5742 {
5743 return qe_invalid;
5744 }
5745
5746 if(!p_getc(&temp_misc.cycles[i][j].speed,f,true))
5747 {
5748 return qe_invalid;
5749 }
5750 }
5751 }
5752 }
5753
5754 //Wind warps are now just another warp ring.
5755
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version <= 5)
5756 {
5757 if(Header->zelda_version > 0x192)
5758 {
5759 if(!p_igetw(&windwarps,f,true))
5760 {
5761 return qe_invalid;
5762 }
5763 }
5764
5765 for(int32_t i=0; i<windwarps; i++)
5766 {
5767 if(s_version <= 3)
5768 {
5769 if(!p_getc(&tempbyte,f,true))
5770 {
5771 return qe_invalid;
5772 }
5773
5774 temp_misc.warp[8].dmap[i]=tempbyte;
5775 }
5776 else
5777 {
5778 if(!p_igetw(&temp_misc.warp[8].dmap[i],f,true))
5779 {
5780 return qe_invalid;
5781 }
5782 }
5783
5784 if(!p_getc(&temp_misc.warp[8].scr[i],f,true))
5785 {
5786 return qe_invalid;
5787 }
5788
5789 temp_misc.warp[8].size = 9;
5790
5791 if(s_version == 5)
5792 {
5793 if(!p_getc(&tempbyte,f,true))
5794 {
5795 return qe_invalid;
5796 }
5797 }
5798 }
5799 }
5800
5801
5802 //triforce pieces
5803
2/2
✓ Branch 0 taken 744 times.
✓ Branch 1 taken 93 times.
837 for(int32_t i=0; i<triforces; i++)
5804 {
5805
1/2
✓ Branch 0 taken 744 times.
✗ Branch 1 not taken.
744 if(!p_getc(&temp_misc.triforce[i],f,true))
5806 {
5807 return qe_invalid;
5808 }
5809 744 }
5810
5811 //misc color data
5812
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version<3)
5813 {
5814 if(!p_getc(&temp_misc.colors.text,f,true))
5815 {
5816 return qe_invalid;
5817 }
5818
5819 if(!p_getc(&temp_misc.colors.caption,f,true))
5820 {
5821 return qe_invalid;
5822 }
5823
5824 if(!p_getc(&temp_misc.colors.overw_bg,f,true))
5825 {
5826 return qe_invalid;
5827 }
5828
5829 if(!p_getc(&temp_misc.colors.dngn_bg,f,true))
5830 {
5831 return qe_invalid;
5832 }
5833
5834 if(!p_getc(&temp_misc.colors.dngn_fg,f,true))
5835 {
5836 return qe_invalid;
5837 }
5838
5839 if(!p_getc(&temp_misc.colors.cave_fg,f,true))
5840 {
5841 return qe_invalid;
5842 }
5843
5844 if(!p_getc(&temp_misc.colors.bs_dk,f,true))
5845 {
5846 return qe_invalid;
5847 }
5848
5849 if(!p_getc(&temp_misc.colors.bs_goal,f,true))
5850 {
5851 return qe_invalid;
5852 }
5853
5854 if(!p_getc(&temp_misc.colors.compass_lt,f,true))
5855 {
5856 return qe_invalid;
5857 }
5858
5859 if(!p_getc(&temp_misc.colors.compass_dk,f,true))
5860 {
5861 return qe_invalid;
5862 }
5863
5864 if(!p_getc(&temp_misc.colors.subscr_bg,f,true))
5865 {
5866 return qe_invalid;
5867 }
5868
5869 if(!p_getc(&temp_misc.colors.triframe_color,f,true))
5870 {
5871 return qe_invalid;
5872 }
5873
5874 if(!p_getc(&temp_misc.colors.hero_dot,f,true))
5875 {
5876 return qe_invalid;
5877 }
5878
5879 if(!p_getc(&temp_misc.colors.bmap_bg,f,true))
5880 {
5881 return qe_invalid;
5882 }
5883
5884 if(!p_getc(&temp_misc.colors.bmap_fg,f,true))
5885 {
5886 return qe_invalid;
5887 }
5888
5889 if(!p_getc(&temp_misc.colors.triforce_cset,f,true))
5890 {
5891 return qe_invalid;
5892 }
5893
5894 if(!p_getc(&temp_misc.colors.triframe_cset,f,true))
5895 {
5896 return qe_invalid;
5897 }
5898
5899 if(!p_getc(&temp_misc.colors.overworld_map_cset,f,true))
5900 {
5901 return qe_invalid;
5902 }
5903
5904 if(!p_getc(&temp_misc.colors.dungeon_map_cset,f,true))
5905 {
5906 return qe_invalid;
5907 }
5908
5909 if(!p_getc(&temp_misc.colors.blueframe_cset,f,true))
5910 {
5911 return qe_invalid;
5912 }
5913
5914 if(!p_igetw(&temp_misc.colors.triforce_tile,f,true))
5915 {
5916 return qe_invalid;
5917 }
5918
5919 if(!p_igetw(&temp_misc.colors.triframe_tile,f,true))
5920 {
5921 return qe_invalid;
5922 }
5923
5924 if(!p_igetw(&temp_misc.colors.overworld_map_tile,f,true))
5925 {
5926 return qe_invalid;
5927 }
5928
5929 if(!p_igetw(&temp_misc.colors.dungeon_map_tile,f,true))
5930 {
5931 return qe_invalid;
5932 }
5933
5934 if(!p_igetw(&temp_misc.colors.blueframe_tile,f,true))
5935 {
5936 return qe_invalid;
5937 }
5938
5939 if(!p_igetw(&temp_misc.colors.HCpieces_tile,f,true))
5940 {
5941 return qe_invalid;
5942 }
5943
5944 if(!p_getc(&temp_misc.colors.HCpieces_cset,f,true))
5945 {
5946 return qe_invalid;
5947 }
5948
5949 temp_misc.colors.msgtext = 0x01;
5950
5951 if(Header->zelda_version < 0x193)
5952 {
5953 for(int32_t i=0; i<7; i++)
5954 {
5955 if(!p_getc(&tempbyte,f,true))
5956 {
5957 return qe_invalid;
5958 }
5959 }
5960 }
5961
5962 if((Header->zelda_version == 0x192)&&(Header->build>145))
5963 {
5964 for(int32_t i=0; i<256; i++)
5965 {
5966 if(!p_getc(&tempbyte,f,true))
5967 {
5968 return qe_invalid;
5969 }
5970 }
5971 }
5972
5973 if(s_version>1)
5974 {
5975 if(!p_getc(&temp_misc.colors.subscr_shadow,f,true))
5976 {
5977 return qe_invalid;
5978 }
5979 }
5980
5981 //save game icons
5982 if((Header->zelda_version < 0x192)||
5983 ((Header->zelda_version == 0x192)&&(Header->build<73)))
5984 {
5985 icons=3;
5986 }
5987
5988 for(int32_t i=0; i<icons; i++)
5989 {
5990 if(!p_igetw(&temp_misc.icons[i],f,true))
5991 {
5992 return qe_invalid;
5993 }
5994 }
5995 }
5996
5997
1/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
93 if((Header->zelda_version < 0x192)||
5998
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ((Header->zelda_version == 0x192)&&(Header->build<30)))
5999 {
6000 if(keepdata==true)
6001 {
6002 memcpy(Misc, &temp_misc, sizeof(temp_misc));
6003 }
6004
6005 return 0;
6006 }
6007
6008 //pond information
6009
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(Header->zelda_version < 0x193)
6010 {
6011 if((Header->zelda_version == 0x192)&&(Header->build<146))
6012 {
6013 pondsize=25;
6014 }
6015
6016 for(int32_t i=0; i<ponds; i++)
6017 {
6018 for(int32_t j=0; j<pondsize; j++)
6019 {
6020 if(!p_getc(&tempbyte,f,true))
6021 {
6022 return qe_invalid;
6023
6024 }
6025 }
6026 }
6027 }
6028
6029 //end string
6030
1/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
93 if((Header->zelda_version < 0x192)||
6031
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ((Header->zelda_version == 0x192)&&(Header->build<146)))
6032 {
6033 if(!p_getc(&tempbyte,f,true))
6034 {
6035 return qe_invalid;
6036 }
6037
6038 temp_misc.endstring=tempbyte;
6039
6040 if(!p_getc(&tempbyte,f,true))
6041 {
6042 return qe_invalid;
6043 }
6044 }
6045 else
6046 {
6047
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&temp_misc.endstring,f,true))
6048 {
6049 return qe_invalid;
6050 }
6051 }
6052
6053 //expansion
6054
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(Header->zelda_version < 0x193)
6055 {
6056 if((Header->zelda_version == 0x192)&&(Header->build<73))
6057 {
6058 expansionsize=99*2;
6059 }
6060
6061 for(int32_t i=0; i<expansionsize; i++)
6062 {
6063 if(!p_getc(&tempbyte,f,true))
6064 {
6065 return qe_invalid;
6066 }
6067 }
6068 }
6069 //shops v8
6070
6071
6072
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if(s_version >= 8)
6073 {
6074
2/2
✓ Branch 0 taken 288 times.
✓ Branch 1 taken 20 times.
308 for(int32_t i=0; i<shops; i++)
6075 {
6076
2/2
✓ Branch 0 taken 864 times.
✓ Branch 1 taken 288 times.
1152 for(int32_t j=0; j<3; j++)
6077 {
6078
1/2
✓ Branch 0 taken 864 times.
✗ Branch 1 not taken.
864 if(!p_igetw(&temp_misc.shop[i].str[j],f,true))
6079 return qe_invalid;
6080 864 }
6081 288 }
6082 20 }
6083
6084 93 memset(&temp_misc.questmisc, 0, sizeof(int32_t)*32);
6085 93 memset(&temp_misc.questmisc_strings, 0, sizeof(char)*4096);
6086 93 memset(&temp_misc.zscript_last_compiled_version, 0, sizeof(int32_t));
6087
6088 //v9 includes quest misc[32]
6089
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if(s_version >= 9)
6090 {
6091
2/2
✓ Branch 0 taken 640 times.
✓ Branch 1 taken 20 times.
660 for ( int32_t q = 0; q < 32; q++ )
6092 {
6093
1/2
✓ Branch 0 taken 640 times.
✗ Branch 1 not taken.
640 if(!p_igetl(&temp_misc.questmisc[q],f,true))
6094 return qe_invalid;
6095 640 }
6096
2/2
✓ Branch 0 taken 640 times.
✓ Branch 1 taken 20 times.
660 for ( int32_t q = 0; q < 32; q++ )
6097 {
6098
2/2
✓ Branch 0 taken 81920 times.
✓ Branch 1 taken 640 times.
82560 for ( int32_t j = 0; j < 128; j++ )
6099
1/2
✓ Branch 0 taken 81920 times.
✗ Branch 1 not taken.
81920 if(!p_getc(&temp_misc.questmisc_strings[q][j],f,true))
6100 return qe_invalid;
6101 640 }
6102 20 }
6103
6104
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(s_version >= 11 )
6105 {
6106
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(!p_igetl(&temp_misc.zscript_last_compiled_version,f,true))
6107 return qe_invalid;
6108 20 }
6109
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 else if(s_version < 11 )
6110 {
6111 73 temp_misc.zscript_last_compiled_version = -1;
6112 73 }
6113
6114 93 FFCore.quest_format[vLastCompile] = temp_misc.zscript_last_compiled_version;
6115
6116
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(s_version >= 12)
6117 {
6118 byte spr;
6119
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 20 times.
5140 for(int32_t q = 0; q < sprMAX; ++q)
6120 {
6121
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_getc(&spr,f,true))
6122 return qe_invalid;
6123 5120 temp_misc.sprites[q] = spr;
6124 5120 }
6125 20 }
6126 else
6127 {
6128 73 memset(&(temp_misc.sprites), 0, sizeof(temp_misc.sprites));
6129 //temp_misc.sprites[sprFALL] = ;
6130 }
6131
6132
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(s_version >= 13)
6133 {
6134
2/2
✓ Branch 0 taken 1280 times.
✓ Branch 1 taken 20 times.
1300 for(size_t q = 0; q < 64; ++q)
6135 {
6136 1280 bottletype* bt = &(temp_misc.bottle_types[q]);
6137
1/2
✓ Branch 0 taken 1280 times.
✗ Branch 1 not taken.
1280 if (!pfread(bt->name, 32, f, true))
6138 return qe_invalid;
6139
2/2
✓ Branch 0 taken 3840 times.
✓ Branch 1 taken 1280 times.
5120 for(size_t j = 0; j < 3; ++j)
6140 {
6141
1/2
✓ Branch 0 taken 3840 times.
✗ Branch 1 not taken.
3840 if (!p_getc(&(bt->counter[j]), f, true))
6142 return qe_invalid;
6143
1/2
✓ Branch 0 taken 3840 times.
✗ Branch 1 not taken.
3840 if (!p_igetw(&(bt->amount[j]), f, true))
6144 return qe_invalid;
6145 3840 }
6146
1/2
✓ Branch 0 taken 1280 times.
✗ Branch 1 not taken.
1280 if (!p_getc(&(bt->flags), f, true))
6147 return qe_invalid;
6148
1/2
✓ Branch 0 taken 1280 times.
✗ Branch 1 not taken.
1280 if (!p_getc(&(bt->next_type), f, true))
6149 return qe_invalid;
6150 1280 }
6151
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 20 times.
5140 for(size_t q = 0; q < 256; ++q)
6152 {
6153 5120 bottleshoptype* bst = &(temp_misc.bottle_shop_types[q]);
6154
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if (!pfread(bst->name, 32, f, true))
6155 return qe_invalid;
6156
2/2
✓ Branch 0 taken 15360 times.
✓ Branch 1 taken 5120 times.
20480 for(size_t j = 0; j < 3; ++j)
6157 {
6158
1/2
✓ Branch 0 taken 15360 times.
✗ Branch 1 not taken.
15360 if (!p_getc(&(bst->fill[j]), f, true))
6159 return qe_invalid;
6160
1/2
✓ Branch 0 taken 15360 times.
✗ Branch 1 not taken.
15360 if (!p_igetw(&(bst->comb[j]), f, true))
6161 return qe_invalid;
6162
1/2
✓ Branch 0 taken 15360 times.
✗ Branch 1 not taken.
15360 if (!p_getc(&(bst->cset[j]), f, true))
6163 return qe_invalid;
6164
1/2
✓ Branch 0 taken 15360 times.
✗ Branch 1 not taken.
15360 if (!p_igetw(&(bst->price[j]), f, true))
6165 return qe_invalid;
6166
1/2
✓ Branch 0 taken 15360 times.
✗ Branch 1 not taken.
15360 if (!p_igetw(&(bst->str[j]), f, true))
6167 return qe_invalid;
6168 15360 }
6169 5120 }
6170 20 }
6171 else
6172 {
6173
2/2
✓ Branch 0 taken 4672 times.
✓ Branch 1 taken 73 times.
4745 for(size_t q = 0; q < 64; ++q)
6174 4672 temp_misc.bottle_types[q].clear();
6175
2/2
✓ Branch 0 taken 18688 times.
✓ Branch 1 taken 73 times.
18761 for(size_t q = 0; q < 256; ++q)
6176 18688 temp_misc.bottle_shop_types[q].clear();
6177 }
6178
6179
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(s_version >= 14)
6180 {
6181 byte msfx;
6182
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 20 times.
5140 for(int32_t q = 0; q < sfxMAX; ++q)
6183 {
6184
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_getc(&msfx,f,true))
6185 return qe_invalid;
6186 5120 temp_misc.miscsfx[q] = msfx;
6187 5120 }
6188 20 }
6189 else
6190 {
6191 73 memset(&(temp_misc.miscsfx), 0, sizeof(temp_misc.miscsfx));
6192 73 temp_misc.miscsfx[sfxBUSHGRASS] = WAV_ZN1GRASSCUT;
6193 73 temp_misc.miscsfx[sfxLOWHEART] = WAV_ER;
6194 }
6195
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(s_version < 15)
6196 {
6197 73 temp_misc.miscsfx[sfxHURTPLAYER] = WAV_OUCH;
6198 73 temp_misc.miscsfx[sfxHAMMERPOUND] = WAV_ZN1HAMMERPOST;
6199 73 temp_misc.miscsfx[sfxSUBSCR_ITEM_ASSIGN] = WAV_PLACE;
6200 73 temp_misc.miscsfx[sfxSUBSCR_CURSOR_MOVE] = WAV_CHIME;
6201 73 temp_misc.miscsfx[sfxREFILL] = WAV_MSG;
6202 73 temp_misc.miscsfx[sfxDRAIN] = WAV_MSG;
6203 73 }
6204
6205
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata==true)
6206 {
6207 93 memcpy(Misc, &temp_misc, sizeof(temp_misc));
6208 93 }
6209
6210 93 return 0;
6211 93 }
6212
6213 extern char *item_string[ITEMCNT];
6214 extern const char *old_item_string[iLast];
6215 extern char *weapon_string[WPNCNT];
6216 extern const char *old_weapon_string[wLast];
6217
6218 93 int32_t readitems(PACKFILE *f, word version, word build, bool keepdata, bool zgpmode)
6219 {
6220 byte padding;
6221 int32_t dummy;
6222 93 word items_to_read=MAXITEMS;
6223 itemdata tempitem;
6224 93 word s_version=0, s_cversion=0;
6225 word dummy_word;
6226
6227
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(version < 0x186)
6228 {
6229 items_to_read=64;
6230 }
6231
6232
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(version > 0x192)
6233 {
6234 93 items_to_read=0;
6235
6236 //section version info
6237
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_version,f,true))
6238 {
6239 return qe_invalid;
6240 }
6241
6242 93 FFCore.quest_format[vItems] = s_version;
6243
6244 //al_trace("Items version %d\n", s_version);
6245
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_cversion,f,true))
6246 {
6247 return qe_invalid;
6248 }
6249
6250 //section size
6251
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&dummy,f,true))
6252 {
6253 return qe_invalid;
6254 }
6255
6256 //finally... section data
6257
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&items_to_read,f,true))
6258 {
6259 return qe_invalid;
6260 }
6261 93 }
6262
6263
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version>1)
6264 {
6265
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<items_to_read; i++)
6266 {
6267 char tempname[64];
6268
6269
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!pfread(tempname, 64, f, keepdata))
6270 {
6271 return qe_invalid;
6272 }
6273
6274
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
23808 if(keepdata)
6275 {
6276 23808 strcpy(item_string[i], tempname);
6277 23808 }
6278 23808 }
6279 93 }
6280 else
6281 {
6282 if(keepdata)
6283 {
6284 for(int32_t i=0; i<ITEMCNT; i++)
6285 {
6286 reset_itemname(i);
6287 }
6288 }
6289 }
6290
6291
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata)
6292 {
6293
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<MAXITEMS; i++)
6294 {
6295 23808 itemdata& id = itemsbuf[i];
6296 23808 memset(&id, 0, sizeof(itemdata));
6297 23808 id.count=-1;
6298 23808 id.playsound=WAV_SCALE;
6299 23808 reset_itembuf(&id,i);
6300 23808 }
6301 93 }
6302
6303
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<items_to_read; i++)
6304 {
6305 23808 memset(&tempitem, 0, sizeof(itemdata));
6306 23808 reset_itembuf(&tempitem,i);
6307
6308
6309
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if ( s_version > 35 ) //expanded tiles
6310 {
6311
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.tile,f,true))
6312 {
6313 return qe_invalid;
6314 }
6315 5120 }
6316 else
6317 {
6318
1/2
✓ Branch 0 taken 18688 times.
✗ Branch 1 not taken.
18688 if(!p_igetw(&tempitem.tile,f,true))
6319 {
6320 return qe_invalid;
6321 }
6322 }
6323
6324
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.misc_flags,f,true))
6325 {
6326 return qe_invalid;
6327 }
6328
6329
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.csets,f,true))
6330 {
6331 return qe_invalid;
6332 }
6333
6334
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.frames,f,true))
6335 {
6336 return qe_invalid;
6337 }
6338
6339
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.speed,f,true))
6340 {
6341 return qe_invalid;
6342 }
6343
6344
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.delay,f,true))
6345 {
6346 return qe_invalid;
6347 }
6348
6349
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(version < 0x193)
6350 {
6351 if(!p_getc(&padding,f,true))
6352 {
6353 return qe_invalid;
6354 }
6355
6356 if((version < 0x192)||((version == 0x192)&&(build<186)))
6357 {
6358 switch(i)
6359 {
6360 case iShield:
6361 tempitem.ltm=get_bit(quest_rules,qr_BSZELDA)?-12:10;
6362 break;
6363
6364 case iMShield:
6365 tempitem.ltm=get_bit(quest_rules,qr_BSZELDA)?-6:-10;
6366 break;
6367
6368 default:
6369 tempitem.ltm=0;
6370 break;
6371 }
6372
6373 tempitem.count=-1;
6374 tempitem.flags=tempitem.wpn=tempitem.wpn2=tempitem.wpn3=tempitem.wpn3=tempitem.pickup_hearts=
6375 tempitem.misc1=tempitem.misc2=tempitem.usesound=0;
6376 tempitem.family=0xFF;
6377 tempitem.playsound=WAV_SCALE;
6378 reset_itembuf(&tempitem,i);
6379
6380 if(keepdata==true)
6381 {
6382 memcpy(&itemsbuf[i], &tempitem, sizeof(itemdata));
6383 }
6384
6385 continue;
6386 }
6387 }
6388
6389
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_igetl(&tempitem.ltm,f,true))
6390 {
6391 return qe_invalid;
6392 }
6393
6394
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(version < 0x193)
6395 {
6396 for(int32_t q=0; q<12; q++)
6397 {
6398 if(!p_getc(&padding,f,true))
6399 {
6400 return qe_invalid;
6401 }
6402 }
6403 }
6404
6405
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version>1)
6406 {
6407
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if ( s_version >= 31 )
6408 {
6409
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.family,f,true))
6410 {
6411 return qe_invalid;
6412 }
6413 5120 }
6414 else
6415 {
6416
1/2
✓ Branch 0 taken 18688 times.
✗ Branch 1 not taken.
18688 if(!p_getc(&tempitem.family,f,true))
6417 {
6418 return qe_invalid;
6419 }
6420 }
6421
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version < 16)
6422 if(tempitem.family == 0xFF)
6423 tempitem.family = itype_misc;
6424
6425
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.fam_type,f,true))
6426 {
6427 return qe_invalid;
6428 }
6429
6430
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version>5)
6431 {
6432
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if(s_version>=31)
6433 {
6434
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.power,f,true))
6435 {
6436 return qe_invalid;
6437 }
6438 5120 }
6439 else
6440 {
6441
1/2
✓ Branch 0 taken 18688 times.
✗ Branch 1 not taken.
18688 if(!p_getc(&tempitem.power,f,true))
6442 {
6443 return qe_invalid;
6444 }
6445 }
6446
6447 //converted flags from 16b to 32b -Z
6448
2/2
✓ Branch 0 taken 18688 times.
✓ Branch 1 taken 5120 times.
23808 if ( s_version < 41 )
6449 {
6450
1/2
✓ Branch 0 taken 18688 times.
✗ Branch 1 not taken.
18688 if(!p_igetw(&tempitem.flags,f,true))
6451 {
6452 return qe_invalid;
6453 }
6454 18688 }
6455 else
6456 {
6457
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.flags,f,true))
6458 {
6459 return qe_invalid;
6460 }
6461 }
6462 23808 }
6463 else
6464 {
6465 //tempitem.power = tempitem.fam_type;
6466 char tempchar;
6467
6468 if(!p_getc(&tempchar,f,true))
6469 {
6470 return qe_invalid;
6471 }
6472
6473 tempitem.flags |= (tempchar ? ITEM_GAMEDATA : 0);
6474 }
6475
6476
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_igetw(&tempitem.script,f,true))
6477 {
6478 return qe_invalid;
6479 }
6480
6481
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version<=3)
6482 {
6483 if(tempitem.script > NUMSCRIPTITEM)
6484 {
6485 tempitem.script = 0;
6486 }
6487 }
6488
6489
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.count,f,true))
6490 {
6491 return qe_invalid;
6492 }
6493
6494
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_igetw(&tempitem.amount,f,true))
6495 {
6496 return qe_invalid;
6497 }
6498
6499
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_igetw(&tempitem.collect_script,f,true))
6500 {
6501 return qe_invalid;
6502 }
6503
6504
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version<=3)
6505 {
6506 if(tempitem.collect_script > NUMSCRIPTITEM)
6507 {
6508 tempitem.collect_script = 0;
6509 }
6510 }
6511
6512
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_igetw(&tempitem.setmax,f,true))
6513 {
6514 return qe_invalid;
6515 }
6516
6517
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_igetw(&tempitem.max,f,true))
6518 {
6519 return qe_invalid;
6520 }
6521
6522
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.playsound,f,true))
6523 {
6524 return qe_invalid;
6525 }
6526
6527
2/2
✓ Branch 0 taken 190464 times.
✓ Branch 1 taken 23808 times.
214272 for(int32_t j=0; j<8; j++)
6528 {
6529
1/2
✓ Branch 0 taken 190464 times.
✗ Branch 1 not taken.
190464 if(!p_igetl(&tempitem.initiald[j],f,true))
6530 {
6531 return qe_invalid;
6532 }
6533 190464 }
6534
6535
2/2
✓ Branch 0 taken 47616 times.
✓ Branch 1 taken 23808 times.
71424 for(int32_t j=0; j<2; j++)
6536 {
6537
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&tempitem.initiala[j],f,true))
6538 {
6539 return qe_invalid;
6540 }
6541 47616 }
6542
6543
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
23808 if(s_version>4)
6544 {
6545
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version>5)
6546 {
6547
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.wpn,f,true))
6548 {
6549 return qe_invalid;
6550 }
6551
6552
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.wpn2,f,true))
6553 {
6554 return qe_invalid;
6555 }
6556
6557
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.wpn3,f,true))
6558 {
6559 return qe_invalid;
6560 }
6561
6562
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.wpn4,f,true))
6563 {
6564 return qe_invalid;
6565 }
6566
6567
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
23808 if(s_version>=15)
6568 {
6569
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.wpn5,f,true))
6570 {
6571 return qe_invalid;
6572 }
6573
6574
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.wpn6,f,true))
6575 {
6576 return qe_invalid;
6577 }
6578
6579
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.wpn7,f,true))
6580 {
6581 return qe_invalid;
6582 }
6583
6584
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.wpn8,f,true))
6585 {
6586 return qe_invalid;
6587 }
6588
6589
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.wpn9,f,true))
6590 {
6591 return qe_invalid;
6592 }
6593
6594
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.wpn10,f,true))
6595 {
6596 return qe_invalid;
6597 }
6598 23808 }
6599
6600
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.pickup_hearts,f,true))
6601 {
6602 return qe_invalid;
6603 }
6604
6605
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
23808 if(s_version<15)
6606 {
6607 if(!p_igetw(&dummy_word,f,true))
6608 {
6609 return qe_invalid;
6610 }
6611
6612 tempitem.misc1=dummy_word;
6613
6614 if(!p_igetw(&dummy_word,f,true))
6615 {
6616 return qe_invalid;
6617 }
6618
6619 tempitem.misc2=dummy_word;
6620 }
6621 else
6622 {
6623
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_igetl(&tempitem.misc1,f,true))
6624 {
6625 return qe_invalid;
6626 }
6627
6628
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_igetl(&tempitem.misc2,f,true))
6629 {
6630 return qe_invalid;
6631 }
6632
6633 // Version 24: shICE -> shSCRIPT; previously, all shields could block script weapons
6634
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version<24)
6635 {
6636 if(tempitem.family==itype_shield)
6637 {
6638 tempitem.misc1|=shSCRIPT;
6639 }
6640 }
6641 }
6642
6643
2/2
✓ Branch 0 taken 18688 times.
✓ Branch 1 taken 5120 times.
23808 if(s_version < 53)
6644 {
6645 byte tempbyte;
6646
1/2
✓ Branch 0 taken 18688 times.
✗ Branch 1 not taken.
18688 if(!p_getc(&tempbyte,f,true))
6647 {
6648 return qe_invalid;
6649 }
6650 18688 tempitem.cost_amount[0] = tempbyte;
6651 18688 }
6652 else
6653 {
6654
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 5120 times.
15360 for(auto q = 0; q < 2; ++q)
6655 {
6656
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetw(&tempitem.cost_amount[q],f,true))
6657 {
6658 return qe_invalid;
6659 }
6660 10240 }
6661 }
6662 23808 }
6663 else
6664 {
6665 char tempchar;
6666
6667 if(!p_getc(&tempchar,f,true))
6668 {
6669 return qe_invalid;
6670 }
6671
6672 tempitem.flags |= (tempchar ? ITEM_EDIBLE : 0);
6673 }
6674
6675 // June 2007: more misc. attributes
6676
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
23808 if(s_version>=12)
6677 {
6678
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
23808 if(s_version<15)
6679 {
6680 if(!p_igetw(&dummy_word,f,true))
6681 {
6682 return qe_invalid;
6683 }
6684
6685 tempitem.misc3=dummy_word;
6686
6687 if(!p_igetw(&dummy_word,f,true))
6688 {
6689 return qe_invalid;
6690 }
6691
6692 tempitem.misc4=dummy_word;
6693 }
6694 else
6695 {
6696
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_igetl(&tempitem.misc3,f,true))
6697 {
6698 return qe_invalid;
6699 }
6700
6701
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_igetl(&tempitem.misc4,f,true))
6702 {
6703 return qe_invalid;
6704 }
6705
6706
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_igetl(&tempitem.misc5,f,true))
6707 {
6708 return qe_invalid;
6709 }
6710
6711
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_igetl(&tempitem.misc6,f,true))
6712 {
6713 return qe_invalid;
6714 }
6715
6716
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_igetl(&tempitem.misc7,f,true))
6717 {
6718 return qe_invalid;
6719 }
6720
6721
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_igetl(&tempitem.misc8,f,true))
6722 {
6723 return qe_invalid;
6724 }
6725
6726
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_igetl(&tempitem.misc9,f,true))
6727 {
6728 return qe_invalid;
6729 }
6730
6731
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_igetl(&tempitem.misc10,f,true))
6732 {
6733 return qe_invalid;
6734 }
6735 }
6736
6737
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempitem.usesound,f,true))
6738 {
6739 return qe_invalid;
6740 }
6741
6742
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if(s_version >= 49)
6743 {
6744
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_getc(&tempitem.usesound2,f,true))
6745 {
6746 return qe_invalid;
6747 }
6748 5120 }
6749 18688 else tempitem.usesound2 = 0;
6750
6751
3/4
✓ Branch 0 taken 18688 times.
✓ Branch 1 taken 5120 times.
✓ Branch 2 taken 18688 times.
✗ Branch 3 not taken.
23808 if(s_version < 50 && tempitem.family == itype_mirror)
6752 {
6753 //Split continue/dmap warp effect/sfx, port for old
6754 tempitem.misc2 = tempitem.misc1;
6755 tempitem.usesound2 = tempitem.usesound;
6756 }
6757 23808 }
6758 23808 }
6759
6760
2/2
✓ Branch 0 taken 18688 times.
✓ Branch 1 taken 5120 times.
23808 if ( s_version >= 26 ) //! New itemdata vars for weapon editor. -Z
6761 { // temp.useweapon, temp.usedefence, temp.weaprange, temp.weap_pattern[ITEM_MOVEMENT_PATTERNS]
6762
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_getc(&tempitem.useweapon,f,true))
6763 {
6764 return qe_invalid;
6765 }
6766
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_getc(&tempitem.usedefence,f,true))
6767 {
6768 return qe_invalid;
6769 }
6770
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.weaprange,f,true))
6771 {
6772 return qe_invalid;
6773 }
6774
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.weapduration,f,true))
6775 {
6776 return qe_invalid;
6777 }
6778
2/2
✓ Branch 0 taken 51200 times.
✓ Branch 1 taken 5120 times.
56320 for ( int32_t q = 0; q < ITEM_MOVEMENT_PATTERNS; q++ )
6779 {
6780
1/2
✓ Branch 0 taken 51200 times.
✗ Branch 1 not taken.
51200 if(!p_igetl(&tempitem.weap_pattern[q],f,true))
6781 {
6782 return qe_invalid;
6783 }
6784 51200 }
6785 5120 }
6786
6787
2/2
✓ Branch 0 taken 18688 times.
✓ Branch 1 taken 5120 times.
23808 if ( s_version >= 27 ) //! New itemdata vars for weapon editor. -Z
6788 { // temp.useweapon, temp.usedefence, temp.weaprange, temp.weap_pattern[ITEM_MOVEMENT_PATTERNS]
6789
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.duplicates,f,true))
6790 {
6791 return qe_invalid;
6792 }
6793
2/2
✓ Branch 0 taken 40960 times.
✓ Branch 1 taken 5120 times.
46080 for ( int32_t q = 0; q < INITIAL_D; q++ )
6794 {
6795
1/2
✓ Branch 0 taken 40960 times.
✗ Branch 1 not taken.
40960 if(!p_igetl(&tempitem.weap_initiald[q],f,true))
6796 {
6797 return qe_invalid;
6798 }
6799 40960 }
6800
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 5120 times.
15360 for ( int32_t q = 0; q < INITIAL_A; q++ )
6801 {
6802
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_getc(&tempitem.weap_initiala[q],f,true))
6803 {
6804 return qe_invalid;
6805 }
6806 10240 }
6807
6808
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_getc(&tempitem.drawlayer,f,true))
6809 {
6810 return qe_invalid;
6811 }
6812
6813
6814
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.hxofs,f,true))
6815 {
6816 return qe_invalid;
6817 }
6818
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.hyofs,f,true))
6819 {
6820 return qe_invalid;
6821 }
6822
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.hxsz,f,true))
6823 {
6824 return qe_invalid;
6825 }
6826
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.hysz,f,true))
6827 {
6828 return qe_invalid;
6829 }
6830
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.hzsz,f,true))
6831 {
6832 return qe_invalid;
6833 }
6834
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.xofs,f,true))
6835 {
6836 return qe_invalid;
6837 }
6838
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.yofs,f,true))
6839 {
6840 return qe_invalid;
6841 }
6842
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.weap_hxofs,f,true))
6843 {
6844 return qe_invalid;
6845 }
6846
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.weap_hyofs,f,true))
6847 {
6848 return qe_invalid;
6849 }
6850
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.weap_hxsz,f,true))
6851 {
6852 return qe_invalid;
6853 }
6854
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.weap_hysz,f,true))
6855 {
6856 return qe_invalid;
6857 }
6858
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.weap_hzsz,f,true))
6859 {
6860 return qe_invalid;
6861 }
6862
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.weap_xofs,f,true))
6863 {
6864 return qe_invalid;
6865 }
6866
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.weap_yofs,f,true))
6867 {
6868 return qe_invalid;
6869 }
6870
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetw(&tempitem.weaponscript,f,true))
6871 {
6872 return qe_invalid;
6873 }
6874
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.wpnsprite,f,true))
6875 {
6876 return qe_invalid;
6877 }
6878 5120 auto num_cost_tmr = (s_version > 52 ? 2 : 1);
6879
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 5120 times.
15360 for(auto q = 0; q < num_cost_tmr; ++q)
6880 {
6881
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&tempitem.magiccosttimer[q],f,true))
6882 {
6883 return qe_invalid;
6884 }
6885 10240 }
6886
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5120 times.
5120 for(auto q = num_cost_tmr; q < 2; ++q)
6887 tempitem.magiccosttimer[q] = 0;
6888 5120 }
6889
2/2
✓ Branch 0 taken 18688 times.
✓ Branch 1 taken 5120 times.
23808 if ( s_version >= 28 ) //! New itemdata vars for weapon editor. -Z
6890 {
6891 //Item Size FLags, TileWidth, TileHeight
6892
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.overrideFLAGS,f,true))
6893 {
6894 return qe_invalid;
6895 }
6896
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.tilew,f,true))
6897 {
6898 return qe_invalid;
6899 }
6900
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.tileh,f,true))
6901 {
6902 return qe_invalid;
6903 }
6904 5120 }
6905
2/2
✓ Branch 0 taken 18688 times.
✓ Branch 1 taken 5120 times.
23808 if ( s_version >= 29 ) //! More new vars.
6906 {
6907 //Item Size FLags, TileWidth, TileHeight
6908
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.weapoverrideFLAGS,f,true))
6909 {
6910 return qe_invalid;
6911 }
6912
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.weap_tilew,f,true))
6913 {
6914 return qe_invalid;
6915 }
6916
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.weap_tileh,f,true))
6917 {
6918 return qe_invalid;
6919 }
6920 5120 }
6921
2/2
✓ Branch 0 taken 18688 times.
✓ Branch 1 taken 5120 times.
23808 if ( s_version >= 30 ) //! More new vars.
6922 {
6923 //Pickup Type
6924
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempitem.pickup,f,true))
6925 {
6926 return qe_invalid;
6927 }
6928 5120 }
6929
2/2
✓ Branch 0 taken 18688 times.
✓ Branch 1 taken 5120 times.
23808 if ( s_version >= 32 ) //! More new vars.
6930 {
6931 //Pickup Type
6932
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetw(&tempitem.pstring,f,true))
6933 {
6934 return qe_invalid;
6935 }
6936 5120 }
6937
2/2
✓ Branch 0 taken 18688 times.
✓ Branch 1 taken 5120 times.
23808 if ( s_version >= 33 ) //! More new vars.
6938 {
6939 //Pickup Type
6940
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetw(&tempitem.pickup_string_flags,f,true))
6941 {
6942 return qe_invalid;
6943 }
6944 5120 }
6945
2/2
✓ Branch 0 taken 18688 times.
✓ Branch 1 taken 5120 times.
23808 if ( s_version >= 34 ) //! cost counter
6946 {
6947
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5120 times.
5120 if(s_version < 53)
6948 {
6949 if(!p_getc(&tempitem.cost_counter[0],f,true))
6950 {
6951 return qe_invalid;
6952 }
6953 }
6954 else
6955 {
6956
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 5120 times.
15360 for(auto q = 0; q < 2; ++q)
6957 {
6958
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_getc(&tempitem.cost_counter[q],f,true))
6959 {
6960 return qe_invalid;
6961 }
6962 10240 }
6963 }
6964 5120 }
6965
2/2
✓ Branch 0 taken 18688 times.
✓ Branch 1 taken 5120 times.
23808 if ( s_version >= 44 ) //! sprite scripts
6966 {
6967
2/2
✓ Branch 0 taken 40960 times.
✓ Branch 1 taken 5120 times.
46080 for ( int32_t q = 0; q < 8; q++ )
6968 {
6969
2/2
✓ Branch 0 taken 2662400 times.
✓ Branch 1 taken 40960 times.
2703360 for ( int32_t w = 0; w < 65; w++ )
6970 {
6971
1/2
✓ Branch 0 taken 2662400 times.
✗ Branch 1 not taken.
2662400 if(!p_getc(&(tempitem.initD_label[q][w]),f,keepdata))
6972 {
6973 return qe_invalid;
6974 }
6975 2662400 }
6976
2/2
✓ Branch 0 taken 2662400 times.
✓ Branch 1 taken 40960 times.
2703360 for ( int32_t w = 0; w < 65; w++ )
6977 {
6978
1/2
✓ Branch 0 taken 2662400 times.
✗ Branch 1 not taken.
2662400 if(!p_getc(&(tempitem.weapon_initD_label[q][w]),f,keepdata))
6979 {
6980 return qe_invalid;
6981 }
6982 2662400 }
6983
2/2
✓ Branch 0 taken 2662400 times.
✓ Branch 1 taken 40960 times.
2703360 for ( int32_t w = 0; w < 65; w++ )
6984 {
6985
1/2
✓ Branch 0 taken 2662400 times.
✗ Branch 1 not taken.
2662400 if(!p_getc(&(tempitem.sprite_initD_label[q][w]),f,keepdata))
6986 {
6987 return qe_invalid;
6988 }
6989 2662400 }
6990
1/2
✓ Branch 0 taken 40960 times.
✗ Branch 1 not taken.
40960 if(!p_igetl(&(tempitem.sprite_initiald[q]),f,keepdata))
6991 {
6992 return qe_invalid;
6993 }
6994
6995 40960 }
6996
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 5120 times.
15360 for ( int32_t q = 0; q < 2; q++ )
6997 {
6998
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_getc(&(tempitem.sprite_initiala[q]),f,keepdata))
6999 {
7000 return qe_invalid;
7001 }
7002 10240 }
7003 //Pickup Type
7004
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetw(&tempitem.sprite_script,f,true))
7005 {
7006 return qe_invalid;
7007 }
7008 5120 }
7009
2/2
✓ Branch 0 taken 18688 times.
✓ Branch 1 taken 5120 times.
23808 if ( s_version >= 48 ) //! pickup flags
7010 {
7011
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_getc(&(tempitem.pickupflag),f,keepdata))
7012 {
7013 return qe_invalid;
7014 }
7015 5120 }
7016 23808 }
7017 else
7018 {
7019 tempitem.count=-1;
7020 tempitem.family=itype_misc;
7021 tempitem.flags=tempitem.wpn=tempitem.wpn2=tempitem.wpn3=tempitem.wpn3=tempitem.pickup_hearts=tempitem.misc1=tempitem.misc2=tempitem.usesound=0;
7022 tempitem.playsound=WAV_SCALE;
7023 reset_itembuf(&tempitem,i);
7024 }
7025
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if(s_version < 53)
7026 {
7027
4/4
✓ Branch 0 taken 18310 times.
✓ Branch 1 taken 217 times.
✓ Branch 2 taken 88 times.
✓ Branch 3 taken 73 times.
18688 switch(tempitem.family)
7028 {
7029 case itype_arrow:
7030 217 tempitem.cost_counter[1] = crARROWS;
7031 217 tempitem.cost_amount[1] = 1;
7032 217 break;
7033 case itype_bomb:
7034 88 tempitem.cost_counter[1] = crBOMBS;
7035 88 tempitem.cost_amount[1] = 1;
7036 88 break;
7037 case itype_sbomb:
7038 73 tempitem.cost_counter[1] = crSBOMBS;
7039 73 tempitem.cost_amount[1] = 1;
7040 73 break;
7041 default:
7042 18310 tempitem.cost_counter[1] = crNONE;
7043 18310 tempitem.cost_amount[1] = 0;
7044 18310 }
7045 18688 tempitem.magiccosttimer[1] = 0;
7046 18688 }
7047
7048
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(keepdata==true)
7049 {
7050 23808 memcpy(&itemsbuf[i], &tempitem, sizeof(itemdata));
7051 23808 }
7052 else if(zgpmode)
7053 {
7054 itemsbuf[i].tile=tempitem.tile;
7055 itemsbuf[i].misc_flags=tempitem.misc_flags;
7056 itemsbuf[i].csets=tempitem.csets;
7057 itemsbuf[i].frames=tempitem.frames;
7058 itemsbuf[i].speed=tempitem.speed;
7059 itemsbuf[i].delay=tempitem.delay;
7060 itemsbuf[i].ltm=tempitem.ltm;
7061 }
7062 23808 }
7063
7064 //////////////////////////////////////////////////////
7065 // Now do any updates because of new item additions
7066 // (These can't be done above because items_to_read
7067 // might be too low.)
7068 //////////////////////////////////////////////////////
7069
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata==true)
7070 {
7071
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<MAXITEMS; i++)
7072 {
7073 23808 memcpy(&tempitem, &itemsbuf[i], sizeof(itemdata));
7074
7075 //Account for older quests that didn't have an actual item for the used letter
7076
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
23808 if(s_version < 2 && i==iLetterUsed)
7077 {
7078 reset_itembuf(&tempitem, iLetterUsed);
7079 strcpy(item_string[i],old_item_string[i]);
7080 tempitem.tile = itemsbuf[iLetter].tile;
7081 tempitem.csets = itemsbuf[iLetter].csets;
7082 tempitem.misc_flags = itemsbuf[iLetter].misc_flags;
7083 tempitem.frames = itemsbuf[iLetter].frames;
7084 tempitem.speed = itemsbuf[iLetter].speed;
7085 tempitem.ltm = itemsbuf[iLetter].ltm;
7086 }
7087
7088
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version < 3)
7089 {
7090 switch(i)
7091 {
7092 case iRocsFeather:
7093 case iHoverBoots:
7094 case iSpinScroll:
7095 case iL2SpinScroll:
7096 case iCrossScroll:
7097 case iQuakeScroll:
7098 case iL2QuakeScroll:
7099 case iWhispRing:
7100 case iL2WhispRing:
7101 case iChargeRing:
7102 case iL2ChargeRing:
7103 case iPerilScroll:
7104 case iWalletL3:
7105 case iQuiverL4:
7106 case iBombBagL4:
7107 case iBracelet:
7108 case iL2Bracelet:
7109 case iOldGlove:
7110 case iL2Ladder:
7111 case iWealthMedal:
7112 case iL2WealthMedal:
7113 case iL3WealthMedal:
7114 reset_itembuf(&tempitem, i);
7115 strcpy(item_string[i],old_item_string[i]);
7116 break;
7117
7118 case iSShield:
7119 reset_itembuf(&tempitem, i);
7120 strcpy(item_string[i],old_item_string[i]);
7121 strcpy(item_string[iShield],old_item_string[iShield]);
7122 strcpy(item_string[iMShield],old_item_string[iMShield]);
7123 break;
7124 }
7125 }
7126
7127
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version < 5)
7128 {
7129 switch(i)
7130 {
7131 case iHeartRing:
7132 case iL2HeartRing:
7133 case iL3HeartRing:
7134 case iMagicRing:
7135 case iL2MagicRing:
7136 case iL3MagicRing:
7137 case iL4MagicRing:
7138 reset_itembuf(&tempitem, i);
7139 strcpy(item_string[i],old_item_string[i]);
7140 break;
7141 }
7142 }
7143
7144
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version < 6) // April 2007: Advanced item editing capabilities.
7145 {
7146 if(i!=iBPotion && i!=iRPotion)
7147 tempitem.flags |= get_bit(deprecated_rules,32) ? ITEM_KEEPOLD : 0;
7148
7149 switch(i)
7150 {
7151 case iTriforce:
7152 tempitem.fam_type=1;
7153 break;
7154
7155 case iBigTri:
7156 tempitem.fam_type=0;
7157 break;
7158
7159 case iBombs:
7160 tempitem.fam_type=i_bomb;
7161 tempitem.power=4;
7162 tempitem.wpn=wBOMB;
7163 tempitem.wpn2=wBOOM;
7164 tempitem.misc1 = 50;
7165
7166 if(get_bit(deprecated_rules,116)) tempitem.misc1 = 200; //qr_SLOWBOMBFUSES
7167
7168 break;
7169
7170 case iSBomb:
7171 tempitem.fam_type=i_sbomb;
7172 tempitem.power=16;
7173 tempitem.wpn=wSBOMB;
7174 tempitem.wpn2=wSBOOM;
7175 tempitem.misc1 = 50;
7176
7177 if(get_bit(deprecated_rules,116)) tempitem.misc1 = 400; //qr_SLOWBOMBFUSES
7178
7179 break;
7180
7181 case iBook:
7182 if(get_bit(deprecated_rules, 113))
7183 tempitem.wpn = wFIREMAGIC; //qr_FIREMAGICSPRITE
7184
7185 break;
7186
7187 case iSArrow:
7188 tempitem.wpn2 = get_bit(deprecated_rules,27) ? wSSPARKLE : 0; //qr_SASPARKLES
7189 tempitem.power=4;
7190 tempitem.flags|=ITEM_GAMEDATA;
7191 tempitem.wpn=wSARROW;
7192 break;
7193
7194 case iGArrow:
7195 tempitem.wpn2 = get_bit(deprecated_rules,28) ? wGSPARKLE : 0; //qr_GASPARKLES
7196 tempitem.power=8;
7197 tempitem.flags|=(ITEM_GAMEDATA|ITEM_FLAG1);
7198 tempitem.wpn=wGARROW;
7199 break;
7200
7201 case iBrang:
7202 tempitem.power=0;
7203 tempitem.wpn=wBRANG;
7204 tempitem.misc1=36;
7205 break;
7206
7207 case iMBrang:
7208 tempitem.wpn2 = get_bit(deprecated_rules,29) ? wMSPARKLE : 0; //qr_MBSPARKLES
7209 tempitem.power=0;
7210 tempitem.wpn=wMBRANG;
7211 break;
7212
7213 case iFBrang:
7214 tempitem.wpn3 = get_bit(deprecated_rules,30) ? wFSPARKLE : 0; //qr_FBSPARKLES
7215 tempitem.power=2;
7216 tempitem.wpn=wFBRANG;
7217 break;
7218
7219 case iBoots:
7220 tempitem.cost_amount[0] = get_bit(deprecated_rules,51) ? 1 : 0;
7221 tempitem.power=7;
7222 break;
7223
7224 case iWand:
7225 tempitem.cost_amount[0] = get_bit(deprecated_rules,49) ? 8 : 0;
7226 tempitem.power=2;
7227 tempitem.wpn=wWAND;
7228 tempitem.wpn3=wMAGIC;
7229 break;
7230
7231 case iBCandle:
7232 tempitem.cost_amount[0] = get_bit(deprecated_rules,50) ? 4 : 0;
7233 tempitem.power=1;
7234 tempitem.flags|=(ITEM_GAMEDATA|ITEM_FLAG1);
7235 tempitem.wpn3=wFIRE;
7236 break;
7237
7238 case iRCandle:
7239 tempitem.cost_amount[0] = get_bit(deprecated_rules,50) ? 4 : 0;
7240 tempitem.power=1;
7241 tempitem.wpn3=wFIRE;
7242 break;
7243
7244 case iSword:
7245 tempitem.power=1;
7246 tempitem.flags|= ITEM_FLAG4 |ITEM_FLAG2;
7247 tempitem.wpn=tempitem.wpn3=wSWORD;
7248 tempitem.wpn2=wSWORDSLASH;
7249 break;
7250
7251 case iWSword:
7252 tempitem.power=2;
7253 tempitem.flags|= ITEM_FLAG4 |ITEM_FLAG2;
7254 tempitem.wpn=tempitem.wpn3=wWSWORD;
7255 tempitem.wpn2=wWSWORDSLASH;
7256 break;
7257
7258 case iMSword:
7259 tempitem.power=4;
7260 tempitem.flags|= ITEM_FLAG4 |ITEM_FLAG2;
7261 tempitem.wpn=tempitem.wpn3=wMSWORD;
7262 tempitem.wpn2=wMSWORDSLASH;
7263 break;
7264
7265 case iXSword:
7266 tempitem.power=8;
7267 tempitem.flags|= ITEM_FLAG4 |ITEM_FLAG2;
7268 tempitem.wpn=tempitem.wpn3=wXSWORD;
7269 tempitem.wpn2=wXSWORDSLASH;
7270 break;
7271
7272 case iNayrusLove:
7273 tempitem.flags |= get_bit(deprecated_rules,76) ? ITEM_FLAG1 : 0;
7274 tempitem.flags |= get_bit(deprecated_rules,75) ? ITEM_FLAG2 : 0;
7275 tempitem.wpn=wNAYRUSLOVE1A;
7276 tempitem.wpn2=wNAYRUSLOVE1B;
7277 tempitem.wpn3=wNAYRUSLOVES1A;
7278 tempitem.wpn4=wNAYRUSLOVES1B;
7279 tempitem.wpn6=wNAYRUSLOVE2A;
7280 tempitem.wpn7=wNAYRUSLOVE2B;
7281 tempitem.wpn8=wNAYRUSLOVES2A;
7282 tempitem.wpn9=wNAYRUSLOVES2B;
7283 tempitem.wpn5 = iwNayrusLoveShieldFront;
7284 tempitem.wpn10 = iwNayrusLoveShieldBack;
7285 tempitem.misc1=512;
7286 tempitem.cost_amount[0]=64;
7287 break;
7288
7289 case iLens:
7290 tempitem.misc1=60;
7291 tempitem.flags |= get_bit(quest_rules,qr_ENABLEMAGIC) ? 0 : ITEM_RUPEE_MAGIC;
7292 tempitem.cost_amount[0] = get_bit(quest_rules,qr_ENABLEMAGIC) ? 2 : 1;
7293 break;
7294
7295 case iArrow:
7296 tempitem.power=2;
7297 tempitem.wpn=wARROW;
7298 break;
7299
7300 case iHoverBoots:
7301 tempitem.misc1=45;
7302 tempitem.wpn=iwHover;
7303 break;
7304
7305 case iDinsFire:
7306 tempitem.power=8;
7307 tempitem.wpn=wDINSFIRE1A;
7308 tempitem.wpn2=wDINSFIRE1B;
7309 tempitem.wpn3=wDINSFIRES1A;
7310 tempitem.wpn4=wDINSFIRES1B;
7311 tempitem.misc1 = 32;
7312 tempitem.misc2 = 200;
7313 tempitem.cost_amount[0]=32;
7314 break;
7315
7316 case iFaroresWind:
7317 tempitem.cost_amount[0]=32;
7318 break;
7319
7320 case iHookshot:
7321 tempitem.power=0;
7322 tempitem.flags&=~ITEM_FLAG1;
7323 tempitem.wpn=wHSHEAD;
7324 tempitem.wpn2=wHSCHAIN_H;
7325 tempitem.wpn4=wHSHANDLE;
7326 tempitem.wpn3=wHSCHAIN_V;
7327 tempitem.misc1=50;
7328 tempitem.misc2=100;
7329 break;
7330
7331 case iLongshot:
7332 tempitem.power=0;
7333 tempitem.flags&=~ITEM_FLAG1;
7334 tempitem.wpn=wLSHEAD;
7335 tempitem.wpn2=wLSCHAIN_H;
7336 tempitem.wpn4=wLSHANDLE;
7337 tempitem.wpn3=wLSCHAIN_V;
7338 tempitem.misc1=99;
7339 tempitem.misc2=100;
7340 break;
7341
7342 case iHammer:
7343 tempitem.power=4;
7344 tempitem.wpn=wHAMMER;
7345 tempitem.wpn2=iwHammerSmack;
7346 break;
7347
7348 case iCByrna:
7349 tempitem.power=1;
7350 tempitem.wpn=wCBYRNA;
7351 tempitem.wpn2=wCBYRNASLASH;
7352 tempitem.wpn3=wCBYRNAORB;
7353 tempitem.misc1=4;
7354 tempitem.misc2=16;
7355 tempitem.misc3=1;
7356 tempitem.cost_amount[0]=1;
7357 break;
7358
7359 case iWhistle:
7360 tempitem.wpn=wWIND;
7361 tempitem.misc1=3;
7362 tempitem.flags|=ITEM_FLAG1;
7363 break;
7364
7365 case iBRing:
7366 tempitem.power=2;
7367 tempitem.misc1=spBLUE;
7368 break;
7369
7370 case iRRing:
7371 tempitem.power=4;
7372 tempitem.misc1=spRED;
7373 break;
7374
7375 case iGRing:
7376 tempitem.power=8;
7377 tempitem.misc1=spGOLD;
7378 break;
7379
7380 case iSpinScroll:
7381 tempitem.power = 2;
7382 tempitem.misc1 = 1;
7383 break;
7384
7385 case iL2SpinScroll:
7386 tempitem.family=itype_spinscroll2;
7387 tempitem.fam_type=1;
7388 tempitem.cost_amount[0]=8;
7389 tempitem.power=2;
7390 tempitem.misc1 = 20;
7391 break;
7392
7393 case iQuakeScroll:
7394 tempitem.misc1=0x10;
7395 tempitem.misc2=64;
7396 break;
7397
7398 case iL2QuakeScroll:
7399 tempitem.family=itype_quakescroll2;
7400 tempitem.fam_type=1;
7401 tempitem.power = 2;
7402 tempitem.misc1=0x20;
7403 tempitem.misc2=192;
7404 tempitem.cost_amount[0]=8;
7405 break;
7406
7407 case iChargeRing:
7408 tempitem.misc1=64;
7409 tempitem.misc2=128;
7410 break;
7411
7412 case iL2ChargeRing:
7413 tempitem.misc1=32;
7414 tempitem.misc2=64;
7415 break;
7416
7417 case iOldGlove:
7418 tempitem.flags |= ITEM_FLAG1;
7419
7420 //fallthrough
7421 case iBombBagL4:
7422 case iWalletL3:
7423 case iQuiverL4:
7424 case iBracelet:
7425 tempitem.power = 1;
7426 break;
7427
7428 case iL2Bracelet:
7429 tempitem.power = 2;
7430 break;
7431
7432 case iMKey:
7433 tempitem.power=0xFF;
7434 tempitem.flags |= ITEM_FLAG1;
7435 break;
7436 }
7437 }
7438
7439
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version < 7)
7440 {
7441 switch(i)
7442 {
7443 case iStoneAgony:
7444 case iStompBoots:
7445 case iPerilRing:
7446 case iWhimsicalRing:
7447 {
7448 reset_itembuf(&tempitem, i);
7449 strcpy(item_string[i],old_item_string[i]);
7450 break;
7451 }
7452 }
7453 }
7454
7455
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version < 8) // May 2007: Some corrections.
7456 {
7457 switch(i)
7458 {
7459 case iMShield:
7460 tempitem.misc1|=shFLAME;
7461 tempitem.misc2|=shFIREBALL|shMAGIC;
7462
7463 if(get_bit(quest_rules, qr_SWORDMIRROR))
7464 {
7465 tempitem.misc2 |= shSWORD;
7466 }
7467
7468 // fallthrough
7469 case iShield:
7470 tempitem.misc1|=shFIREBALL|shSWORD|shMAGIC;
7471
7472 // fallthrough
7473 case iSShield:
7474 tempitem.misc1|=shROCK|shARROW|shBRANG|shSCRIPT;
7475
7476 if(get_bit(deprecated_rules,102)) //qr_REFLECTROCKS
7477 {
7478 tempitem.misc2 |= shROCK;
7479 }
7480
7481 break;
7482
7483 case iWhispRing:
7484 tempitem.power=1;
7485 tempitem.flags|=ITEM_GAMEDATA|ITEM_FLAG1;
7486 tempitem.misc1 = 3;
7487 break;
7488
7489 case iL2WhispRing:
7490 tempitem.power=0;
7491 tempitem.flags|=ITEM_GAMEDATA|ITEM_FLAG1;
7492 tempitem.misc1 = 3;
7493 break;
7494
7495 case iL2Ladder:
7496 case iBow:
7497 case iCByrna:
7498 tempitem.power = 1;
7499 break;
7500 }
7501 }
7502
7503
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
23808 if(s_version < 9 && i==iClock)
7504 {
7505 tempitem.misc1 = get_bit(deprecated_rules, qr_TEMPCLOCKS_DEP) ? 256 : 0;
7506 }
7507
7508 //add the misc flag for bomb
7509
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
23808 if(s_version < 10 && tempitem.family == itype_bomb)
7510 {
7511 tempitem.flags = (tempitem.flags & ~ITEM_FLAG1) | (get_bit(quest_rules, qr_LONGBOMBBOOM_DEP) ? ITEM_FLAG1 : 0);
7512 }
7513
7514
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
23808 if(s_version < 11 && tempitem.family == itype_triforcepiece)
7515 {
7516 tempitem.flags = (tempitem.fam_type ? ITEM_GAMEDATA : 0);
7517 tempitem.playsound = (tempitem.fam_type ? WAV_SCALE : WAV_CLEARED);
7518 }
7519
7520
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version < 12) // June 2007: More Misc. attributes.
7521 {
7522 switch(i)
7523 {
7524 case iFBrang:
7525 tempitem.misc4 |= shFIREBALL|shSWORD|shMAGIC;
7526
7527 //fallthrough
7528 case iMBrang:
7529 tempitem.misc3 |= shSWORD|shMAGIC;
7530
7531 //fallthrough
7532 case iHookshot:
7533 case iLongshot:
7534 //fallthrough
7535 tempitem.misc3 |= shFIREBALL;
7536
7537 case iBrang:
7538 tempitem.misc3 |= shBRANG|shROCK|shARROW;
7539 break;
7540 }
7541
7542 switch(tempitem.family)
7543 {
7544 case itype_hoverboots:
7545 tempitem.usesound = WAV_ZN1HOVER;
7546 break;
7547
7548 case itype_wand:
7549 case itype_book:
7550 tempitem.usesound = WAV_WAND;
7551 break;
7552
7553 case itype_arrow:
7554 tempitem.usesound = WAV_ARROW;
7555 break;
7556
7557 case itype_hookshot:
7558 tempitem.usesound = WAV_HOOKSHOT;
7559 break;
7560
7561 case itype_brang:
7562 tempitem.usesound = WAV_BRANG;
7563 break;
7564
7565 case itype_shield:
7566 tempitem.usesound = WAV_CHINK;
7567 break;
7568
7569 case itype_sword:
7570 tempitem.usesound = WAV_SWORD;
7571 break;
7572
7573 case itype_whistle:
7574 tempitem.usesound = WAV_WHISTLE;
7575 break;
7576
7577 case itype_hammer:
7578 tempitem.usesound = WAV_HAMMER;
7579 break;
7580
7581 case itype_dinsfire:
7582 tempitem.usesound = WAV_ZN1DINSFIRE;
7583 break;
7584
7585 case itype_faroreswind:
7586 tempitem.usesound = WAV_ZN1FARORESWIND;
7587 break;
7588
7589 case itype_nayruslove:
7590 tempitem.usesound = WAV_ZN1NAYRUSLOVE1;
7591 break;
7592
7593 case itype_bomb:
7594 case itype_sbomb:
7595 case itype_quakescroll:
7596 case itype_quakescroll2:
7597 tempitem.usesound = WAV_BOMB;
7598 break;
7599
7600 case itype_spinscroll:
7601 case itype_spinscroll2:
7602 tempitem.usesound = WAV_ZN1SPINATTACK;
7603 break;
7604 }
7605 }
7606
7607
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version < 13) // July 2007
7608 {
7609 if(tempitem.family == itype_whistle)
7610 {
7611 tempitem.misc1 = (tempitem.power==2 ? 4 : 3);
7612 tempitem.power = 1;
7613 tempitem.flags|=ITEM_FLAG1;
7614 }
7615 else if(tempitem.family == itype_wand)
7616 tempitem.flags|=ITEM_FLAG1;
7617 else if(tempitem.family == itype_book)
7618 {
7619 tempitem.flags|=ITEM_FLAG1;
7620 tempitem.power = 2;
7621 }
7622 }
7623
7624
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version < 14) // August 2007
7625 {
7626 if(tempitem.family == itype_fairy)
7627 {
7628 tempitem.usesound = WAV_SCALE;
7629
7630 if(tempitem.fam_type)
7631 tempitem.misc3=50;
7632 }
7633 else if(tempitem.family == itype_potion)
7634 {
7635 tempitem.flags |= ITEM_GAINOLD;
7636 }
7637 }
7638
7639
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version < 17) // November 2007
7640 {
7641 if(tempitem.family == itype_candle && !tempitem.wpn3)
7642 {
7643 tempitem.wpn3 = wFIRE;
7644 }
7645 else if(tempitem.family == itype_arrow && tempitem.power>4)
7646 {
7647 tempitem.flags|=ITEM_FLAG1;
7648 }
7649 }
7650
7651
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version < 18) // New Year's Eve 2007
7652 {
7653 if(tempitem.family == itype_whistle)
7654 tempitem.misc2 = 8; // Use the Whistle warp ring
7655 else if(tempitem.family == itype_bait)
7656 tempitem.misc1 = 768; // Frames until it goes
7657 else if(tempitem.family == itype_triforcepiece)
7658 {
7659 if(tempitem.flags & ITEM_GAMEDATA)
7660 {
7661 tempitem.misc2 = 1; // Cutscene 1
7662 tempitem.flags |= ITEM_FLAG1; // Side Warp Out
7663 }
7664 }
7665 }
7666
7667
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version < 19) // January 2008
7668 {
7669 if(tempitem.family == itype_nayruslove)
7670 {
7671 tempitem.flags |= get_bit(deprecated_rules,qr_NOBOMBPALFLASH+1)?ITEM_FLAG3:0;
7672 tempitem.flags |= get_bit(deprecated_rules,qr_NOBOMBPALFLASH+2)?ITEM_FLAG4:0;
7673 }
7674 }
7675
7676
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version < 20) // October 2008
7677 {
7678 if(tempitem.family == itype_nayruslove)
7679 {
7680 tempitem.wpn6=wNAYRUSLOVE2A;
7681 tempitem.wpn7=wNAYRUSLOVE2B;
7682 tempitem.wpn8=wNAYRUSLOVES2A;
7683 tempitem.wpn9=wNAYRUSLOVES2B;
7684 tempitem.wpn5 = iwNayrusLoveShieldFront;
7685 tempitem.wpn10 = iwNayrusLoveShieldBack;
7686 }
7687 }
7688
7689
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version < 21) // November 2008
7690 {
7691 if(tempitem.flags & 0x0100) // ITEM_SLASH
7692 {
7693 tempitem.flags &= ~0x0100;
7694
7695 if(tempitem.family == itype_sword ||
7696 tempitem.family == itype_wand ||
7697 tempitem.family == itype_candle ||
7698 tempitem.family == itype_cbyrna)
7699 {
7700 tempitem.flags |= ITEM_FLAG4;
7701 }
7702 }
7703 }
7704
7705
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version < 22) // September 2009
7706 {
7707 if(tempitem.family == itype_sbomb || tempitem.family == itype_bomb)
7708 {
7709 tempitem.misc3 = tempitem.power/2;
7710 }
7711 }
7712
7713
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version < 23) // March 2011
7714 {
7715 if(tempitem.family == itype_dinsfire)
7716 tempitem.wpn5 = wFIRE;
7717 else if(tempitem.family == itype_book)
7718 tempitem.wpn2 = wFIRE;
7719 }
7720
7721 // Version 25: Bomb bags were acting as though "super bombs also" was checked
7722 // whether it was or not, and a lot of existing quests depended on the
7723 // incorrect behavior.
7724
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version < 25) // January 2012
7725 {
7726 if(tempitem.family == itype_bombbag)
7727 tempitem.flags |= 16;
7728
7729 if(tempitem.family == itype_dinsfire)
7730 tempitem.flags |= ITEM_FLAG3; // Sideview gravity flag
7731 }
7732
7733
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if( version < 0x254) //Nuke greyed-out flags/values from <=2.53, in case they are used in 2.54/2.55
7734 {
7735
60/60
✓ Branch 0 taken 1882 times.
✓ Branch 1 taken 787 times.
✓ Branch 2 taken 219 times.
✓ Branch 3 taken 926 times.
✓ Branch 4 taken 2157 times.
✓ Branch 5 taken 6039 times.
✓ Branch 6 taken 219 times.
✓ Branch 7 taken 217 times.
✓ Branch 8 taken 184 times.
✓ Branch 9 taken 119 times.
✓ Branch 10 taken 73 times.
✓ Branch 11 taken 146 times.
✓ Branch 12 taken 145 times.
✓ Branch 13 taken 88 times.
✓ Branch 14 taken 219 times.
✓ Branch 15 taken 219 times.
✓ Branch 16 taken 146 times.
✓ Branch 17 taken 219 times.
✓ Branch 18 taken 146 times.
✓ Branch 19 taken 73 times.
✓ Branch 20 taken 146 times.
✓ Branch 21 taken 88 times.
✓ Branch 22 taken 73 times.
✓ Branch 23 taken 219 times.
✓ Branch 24 taken 73 times.
✓ Branch 25 taken 73 times.
✓ Branch 26 taken 146 times.
✓ Branch 27 taken 73 times.
✓ Branch 28 taken 73 times.
✓ Branch 29 taken 73 times.
✓ Branch 30 taken 73 times.
✓ Branch 31 taken 73 times.
✓ Branch 32 taken 88 times.
✓ Branch 33 taken 73 times.
✓ Branch 34 taken 73 times.
✓ Branch 35 taken 73 times.
✓ Branch 36 taken 73 times.
✓ Branch 37 taken 146 times.
✓ Branch 38 taken 292 times.
✓ Branch 39 taken 73 times.
✓ Branch 40 taken 73 times.
✓ Branch 41 taken 128 times.
✓ Branch 42 taken 292 times.
✓ Branch 43 taken 73 times.
✓ Branch 44 taken 73 times.
✓ Branch 45 taken 73 times.
✓ Branch 46 taken 73 times.
✓ Branch 47 taken 73 times.
✓ Branch 48 taken 146 times.
✓ Branch 49 taken 146 times.
✓ Branch 50 taken 73 times.
✓ Branch 51 taken 219 times.
✓ Branch 52 taken 219 times.
✓ Branch 53 taken 292 times.
✓ Branch 54 taken 73 times.
✓ Branch 55 taken 73 times.
✓ Branch 56 taken 73 times.
✓ Branch 57 taken 73 times.
✓ Branch 58 taken 73 times.
✓ Branch 59 taken 73 times.
18688 switch(tempitem.family)
7736 {
7737 case itype_sword:
7738 {
7739 6039 tempitem.flags &= ~(ITEM_FLAG5);
7740 6039 tempitem.misc3 = 0;
7741 6039 tempitem.misc4 = 0;
7742 6039 tempitem.misc5 = 0;
7743 6039 tempitem.misc6 = 0;
7744 6039 tempitem.misc7 = 0;
7745 6039 tempitem.misc8 = 0;
7746 6039 tempitem.misc9 = 0;
7747 6039 tempitem.misc10 = 0;
7748 6039 tempitem.wpn4 = 0;
7749 6039 tempitem.wpn5 = 0;
7750 6039 tempitem.wpn6 = 0;
7751 6039 tempitem.wpn7 = 0;
7752 6039 tempitem.wpn8 = 0;
7753 6039 tempitem.wpn9 = 0;
7754 6039 tempitem.wpn10 = 0;
7755 6039 break;
7756 }
7757 case itype_brang:
7758 {
7759 219 tempitem.flags &= ~(ITEM_FLAG4 | ITEM_FLAG5);
7760 219 tempitem.misc2 = 0;
7761 219 tempitem.misc5 = 0;
7762 219 tempitem.misc6 = 0;
7763 219 tempitem.misc7 = 0;
7764 219 tempitem.misc8 = 0;
7765 219 tempitem.misc9 = 0;
7766 219 tempitem.misc10 = 0;
7767 219 tempitem.wpn4 = 0;
7768 219 tempitem.wpn5 = 0;
7769 219 tempitem.wpn6 = 0;
7770 219 tempitem.wpn7 = 0;
7771 219 tempitem.wpn8 = 0;
7772 219 tempitem.wpn9 = 0;
7773 219 tempitem.wpn10 = 0;
7774 219 break;
7775 }
7776 case itype_arrow:
7777 {
7778 217 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
7779 217 tempitem.misc2 = 0;
7780 217 tempitem.misc3 = 0;
7781 217 tempitem.misc4 = 0;
7782 217 tempitem.misc5 = 0;
7783 217 tempitem.misc6 = 0;
7784 217 tempitem.misc7 = 0;
7785 217 tempitem.misc8 = 0;
7786 217 tempitem.misc9 = 0;
7787 217 tempitem.misc10 = 0;
7788 217 tempitem.wpn4 = 0;
7789 217 tempitem.wpn5 = 0;
7790 217 tempitem.wpn6 = 0;
7791 217 tempitem.wpn7 = 0;
7792 217 tempitem.wpn8 = 0;
7793 217 tempitem.wpn9 = 0;
7794 217 tempitem.wpn10 = 0;
7795 217 break;
7796 }
7797 case itype_candle:
7798 {
7799 184 tempitem.flags &= ~ (ITEM_FLAG3 | ITEM_FLAG5);
7800 184 tempitem.misc1 = 0;
7801 184 tempitem.misc2 = 0;
7802 184 tempitem.misc3 = 0;
7803 184 tempitem.misc4 = 0;
7804 184 tempitem.misc5 = 0;
7805 184 tempitem.misc6 = 0;
7806 184 tempitem.misc7 = 0;
7807 184 tempitem.misc8 = 0;
7808 184 tempitem.misc9 = 0;
7809 184 tempitem.misc10 = 0;
7810 184 tempitem.wpn4 = 0;
7811 184 tempitem.wpn5 = 0;
7812 184 tempitem.wpn6 = 0;
7813 184 tempitem.wpn7 = 0;
7814 184 tempitem.wpn8 = 0;
7815 184 tempitem.wpn9 = 0;
7816 184 tempitem.wpn10 = 0;
7817 184 break;
7818 }
7819 case itype_whistle:
7820 {
7821 119 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
7822 119 tempitem.misc3 = 0;
7823 119 tempitem.misc4 = 0;
7824 119 tempitem.misc5 = 0;
7825 119 tempitem.misc6 = 0;
7826 119 tempitem.misc7 = 0;
7827 119 tempitem.misc8 = 0;
7828 119 tempitem.misc9 = 0;
7829 119 tempitem.misc10 = 0;
7830 119 tempitem.wpn2 = 0;
7831 119 tempitem.wpn3 = 0;
7832 119 tempitem.wpn4 = 0;
7833 119 tempitem.wpn5 = 0;
7834 119 tempitem.wpn6 = 0;
7835 119 tempitem.wpn7 = 0;
7836 119 tempitem.wpn8 = 0;
7837 119 tempitem.wpn9 = 0;
7838 119 tempitem.wpn10 = 0;
7839 119 break;
7840 }
7841 case itype_bait:
7842 {
7843 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
7844 73 tempitem.misc2 = 0;
7845 73 tempitem.misc3 = 0;
7846 73 tempitem.misc4 = 0;
7847 73 tempitem.misc5 = 0;
7848 73 tempitem.misc6 = 0;
7849 73 tempitem.misc7 = 0;
7850 73 tempitem.misc8 = 0;
7851 73 tempitem.misc9 = 0;
7852 73 tempitem.misc10 = 0;
7853 73 tempitem.wpn2 = 0;
7854 73 tempitem.wpn3 = 0;
7855 73 tempitem.wpn4 = 0;
7856 73 tempitem.wpn5 = 0;
7857 73 tempitem.wpn6 = 0;
7858 73 tempitem.wpn7 = 0;
7859 73 tempitem.wpn8 = 0;
7860 73 tempitem.wpn9 = 0;
7861 73 tempitem.wpn10 = 0;
7862 73 break;
7863 }
7864 case itype_letter:
7865 {
7866 146 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
7867 146 tempitem.misc1 = 0;
7868 146 tempitem.misc2 = 0;
7869 146 tempitem.misc3 = 0;
7870 146 tempitem.misc4 = 0;
7871 146 tempitem.misc5 = 0;
7872 146 tempitem.misc6 = 0;
7873 146 tempitem.misc7 = 0;
7874 146 tempitem.misc8 = 0;
7875 146 tempitem.misc9 = 0;
7876 146 tempitem.misc10 = 0;
7877 146 tempitem.wpn = 0;
7878 146 tempitem.wpn2 = 0;
7879 146 tempitem.wpn3 = 0;
7880 146 tempitem.wpn4 = 0;
7881 146 tempitem.wpn5 = 0;
7882 146 tempitem.wpn6 = 0;
7883 146 tempitem.wpn7 = 0;
7884 146 tempitem.wpn8 = 0;
7885 146 tempitem.wpn9 = 0;
7886 146 tempitem.wpn10 = 0;
7887 146 break;
7888 }
7889 case itype_potion:
7890 {
7891 145 tempitem.flags &= ~ (ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
7892 145 tempitem.misc3 = 0;
7893 145 tempitem.misc4 = 0;
7894 145 tempitem.misc5 = 0;
7895 145 tempitem.misc6 = 0;
7896 145 tempitem.misc7 = 0;
7897 145 tempitem.misc8 = 0;
7898 145 tempitem.misc9 = 0;
7899 145 tempitem.misc10 = 0;
7900 145 tempitem.wpn = 0;
7901 145 tempitem.wpn2 = 0;
7902 145 tempitem.wpn3 = 0;
7903 145 tempitem.wpn4 = 0;
7904 145 tempitem.wpn5 = 0;
7905 145 tempitem.wpn6 = 0;
7906 145 tempitem.wpn7 = 0;
7907 145 tempitem.wpn8 = 0;
7908 145 tempitem.wpn9 = 0;
7909 145 tempitem.wpn10 = 0;
7910 145 break;
7911 }
7912 case itype_wand:
7913 {
7914 88 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG5);
7915 88 tempitem.misc1 = 0;
7916 88 tempitem.misc2 = 0;
7917 88 tempitem.misc3 = 0;
7918 88 tempitem.misc4 = 0;
7919 88 tempitem.misc5 = 0;
7920 88 tempitem.misc6 = 0;
7921 88 tempitem.misc7 = 0;
7922 88 tempitem.misc8 = 0;
7923 88 tempitem.misc9 = 0;
7924 88 tempitem.misc10 = 0;
7925 88 tempitem.wpn4 = 0;
7926 88 tempitem.wpn5 = 0;
7927 88 tempitem.wpn6 = 0;
7928 88 tempitem.wpn7 = 0;
7929 88 tempitem.wpn8 = 0;
7930 88 tempitem.wpn9 = 0;
7931 88 tempitem.wpn10 = 0;
7932 88 break;
7933 }
7934 case itype_ring:
7935 {
7936 219 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
7937 219 tempitem.misc2 = 0;
7938 219 tempitem.misc3 = 0;
7939 219 tempitem.misc4 = 0;
7940 219 tempitem.misc5 = 0;
7941 219 tempitem.misc6 = 0;
7942 219 tempitem.misc7 = 0;
7943 219 tempitem.misc8 = 0;
7944 219 tempitem.misc9 = 0;
7945 219 tempitem.misc10 = 0;
7946 219 tempitem.wpn = 0;
7947 219 tempitem.wpn2 = 0;
7948 219 tempitem.wpn3 = 0;
7949 219 tempitem.wpn4 = 0;
7950 219 tempitem.wpn5 = 0;
7951 219 tempitem.wpn6 = 0;
7952 219 tempitem.wpn7 = 0;
7953 219 tempitem.wpn8 = 0;
7954 219 tempitem.wpn9 = 0;
7955 219 tempitem.wpn10 = 0;
7956 219 break;
7957 }
7958 case itype_wallet:
7959 {
7960 219 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
7961 219 tempitem.misc3 = 0;
7962 219 tempitem.misc4 = 0;
7963 219 tempitem.misc5 = 0;
7964 219 tempitem.misc6 = 0;
7965 219 tempitem.misc7 = 0;
7966 219 tempitem.misc8 = 0;
7967 219 tempitem.misc9 = 0;
7968 219 tempitem.misc10 = 0;
7969 219 tempitem.wpn = 0;
7970 219 tempitem.wpn2 = 0;
7971 219 tempitem.wpn3 = 0;
7972 219 tempitem.wpn4 = 0;
7973 219 tempitem.wpn5 = 0;
7974 219 tempitem.wpn6 = 0;
7975 219 tempitem.wpn7 = 0;
7976 219 tempitem.wpn8 = 0;
7977 219 tempitem.wpn9 = 0;
7978 219 tempitem.wpn10 = 0;
7979 219 break;
7980 }
7981 case itype_amulet:
7982 {
7983 146 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
7984 146 tempitem.misc1 = 0;
7985 146 tempitem.misc2 = 0;
7986 146 tempitem.misc3 = 0;
7987 146 tempitem.misc4 = 0;
7988 146 tempitem.misc5 = 0;
7989 146 tempitem.misc6 = 0;
7990 146 tempitem.misc7 = 0;
7991 146 tempitem.misc8 = 0;
7992 146 tempitem.misc9 = 0;
7993 146 tempitem.misc10 = 0;
7994 146 tempitem.wpn = 0;
7995 146 tempitem.wpn2 = 0;
7996 146 tempitem.wpn3 = 0;
7997 146 tempitem.wpn4 = 0;
7998 146 tempitem.wpn5 = 0;
7999 146 tempitem.wpn6 = 0;
8000 146 tempitem.wpn7 = 0;
8001 146 tempitem.wpn8 = 0;
8002 146 tempitem.wpn9 = 0;
8003 146 tempitem.wpn10 = 0;
8004 146 break;
8005 }
8006 case itype_shield:
8007 {
8008 219 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8009 219 tempitem.misc3 = 0;
8010 219 tempitem.misc4 = 0;
8011 219 tempitem.misc5 = 0;
8012 219 tempitem.misc6 = 0;
8013 219 tempitem.misc7 = 0;
8014 219 tempitem.misc8 = 0;
8015 219 tempitem.misc9 = 0;
8016 219 tempitem.misc10 = 0;
8017 219 tempitem.wpn = 0;
8018 219 tempitem.wpn2 = 0;
8019 219 tempitem.wpn3 = 0;
8020 219 tempitem.wpn4 = 0;
8021 219 tempitem.wpn5 = 0;
8022 219 tempitem.wpn6 = 0;
8023 219 tempitem.wpn7 = 0;
8024 219 tempitem.wpn8 = 0;
8025 219 tempitem.wpn9 = 0;
8026 219 tempitem.wpn10 = 0;
8027 219 break;
8028 }
8029 case itype_bow:
8030 {
8031 146 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8032 146 tempitem.misc1 = 0;
8033 146 tempitem.misc2 = 0;
8034 146 tempitem.misc3 = 0;
8035 146 tempitem.misc4 = 0;
8036 146 tempitem.misc5 = 0;
8037 146 tempitem.misc6 = 0;
8038 146 tempitem.misc7 = 0;
8039 146 tempitem.misc8 = 0;
8040 146 tempitem.misc9 = 0;
8041 146 tempitem.misc10 = 0;
8042 146 tempitem.wpn = 0;
8043 146 tempitem.wpn2 = 0;
8044 146 tempitem.wpn3 = 0;
8045 146 tempitem.wpn4 = 0;
8046 146 tempitem.wpn5 = 0;
8047 146 tempitem.wpn6 = 0;
8048 146 tempitem.wpn7 = 0;
8049 146 tempitem.wpn8 = 0;
8050 146 tempitem.wpn9 = 0;
8051 146 tempitem.wpn10 = 0;
8052 146 break;
8053 }
8054 case itype_raft:
8055 {
8056 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8057 73 tempitem.misc1 = 0;
8058 73 tempitem.misc2 = 0;
8059 73 tempitem.misc3 = 0;
8060 73 tempitem.misc4 = 0;
8061 73 tempitem.misc5 = 0;
8062 73 tempitem.misc6 = 0;
8063 73 tempitem.misc7 = 0;
8064 73 tempitem.misc8 = 0;
8065 73 tempitem.misc9 = 0;
8066 73 tempitem.misc10 = 0;
8067 73 tempitem.wpn = 0;
8068 73 tempitem.wpn2 = 0;
8069 73 tempitem.wpn3 = 0;
8070 73 tempitem.wpn4 = 0;
8071 73 tempitem.wpn5 = 0;
8072 73 tempitem.wpn6 = 0;
8073 73 tempitem.wpn7 = 0;
8074 73 tempitem.wpn8 = 0;
8075 73 tempitem.wpn9 = 0;
8076 73 tempitem.wpn10 = 0;
8077 73 break;
8078 }
8079 case itype_ladder:
8080 {
8081 146 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8082 146 tempitem.misc1 = 0;
8083 146 tempitem.misc2 = 0;
8084 146 tempitem.misc3 = 0;
8085 146 tempitem.misc4 = 0;
8086 146 tempitem.misc5 = 0;
8087 146 tempitem.misc6 = 0;
8088 146 tempitem.misc7 = 0;
8089 146 tempitem.misc8 = 0;
8090 146 tempitem.misc9 = 0;
8091 146 tempitem.misc10 = 0;
8092 146 tempitem.wpn = 0;
8093 146 tempitem.wpn2 = 0;
8094 146 tempitem.wpn3 = 0;
8095 146 tempitem.wpn4 = 0;
8096 146 tempitem.wpn5 = 0;
8097 146 tempitem.wpn6 = 0;
8098 146 tempitem.wpn7 = 0;
8099 146 tempitem.wpn8 = 0;
8100 146 tempitem.wpn9 = 0;
8101 146 tempitem.wpn10 = 0;
8102 146 break;
8103 }
8104 case itype_book:
8105 {
8106 88 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8107 88 tempitem.misc1 = 0;
8108 88 tempitem.misc2 = 0;
8109 88 tempitem.misc3 = 0;
8110 88 tempitem.misc4 = 0;
8111 88 tempitem.misc5 = 0;
8112 88 tempitem.misc6 = 0;
8113 88 tempitem.misc7 = 0;
8114 88 tempitem.misc8 = 0;
8115 88 tempitem.misc9 = 0;
8116 88 tempitem.misc10 = 0;
8117 88 tempitem.wpn3 = 0;
8118 88 tempitem.wpn4 = 0;
8119 88 tempitem.wpn5 = 0;
8120 88 tempitem.wpn6 = 0;
8121 88 tempitem.wpn7 = 0;
8122 88 tempitem.wpn8 = 0;
8123 88 tempitem.wpn9 = 0;
8124 88 tempitem.wpn10 = 0;
8125 88 break;
8126 }
8127 case itype_magickey:
8128 {
8129 73 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8130 73 tempitem.misc1 = 0;
8131 73 tempitem.misc2 = 0;
8132 73 tempitem.misc3 = 0;
8133 73 tempitem.misc4 = 0;
8134 73 tempitem.misc5 = 0;
8135 73 tempitem.misc6 = 0;
8136 73 tempitem.misc7 = 0;
8137 73 tempitem.misc8 = 0;
8138 73 tempitem.misc9 = 0;
8139 73 tempitem.misc10 = 0;
8140 73 tempitem.wpn = 0;
8141 73 tempitem.wpn2 = 0;
8142 73 tempitem.wpn3 = 0;
8143 73 tempitem.wpn4 = 0;
8144 73 tempitem.wpn5 = 0;
8145 73 tempitem.wpn6 = 0;
8146 73 tempitem.wpn7 = 0;
8147 73 tempitem.wpn8 = 0;
8148 73 tempitem.wpn9 = 0;
8149 73 tempitem.wpn10 = 0;
8150 73 break;
8151 }
8152 case itype_bracelet:
8153 {
8154 219 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8155 219 tempitem.misc1 = 0;
8156 219 tempitem.misc2 = 0;
8157 219 tempitem.misc3 = 0;
8158 219 tempitem.misc4 = 0;
8159 219 tempitem.misc5 = 0;
8160 219 tempitem.misc6 = 0;
8161 219 tempitem.misc7 = 0;
8162 219 tempitem.misc8 = 0;
8163 219 tempitem.misc9 = 0;
8164 219 tempitem.misc10 = 0;
8165 219 tempitem.wpn = 0;
8166 219 tempitem.wpn2 = 0;
8167 219 tempitem.wpn3 = 0;
8168 219 tempitem.wpn4 = 0;
8169 219 tempitem.wpn5 = 0;
8170 219 tempitem.wpn6 = 0;
8171 219 tempitem.wpn7 = 0;
8172 219 tempitem.wpn8 = 0;
8173 219 tempitem.wpn9 = 0;
8174 219 tempitem.wpn10 = 0;
8175 219 break;
8176 }
8177 case itype_flippers:
8178 {
8179 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8180 73 tempitem.misc1 = 0;
8181 73 tempitem.misc2 = 0;
8182 73 tempitem.misc3 = 0;
8183 73 tempitem.misc4 = 0;
8184 73 tempitem.misc5 = 0;
8185 73 tempitem.misc6 = 0;
8186 73 tempitem.misc7 = 0;
8187 73 tempitem.misc8 = 0;
8188 73 tempitem.misc9 = 0;
8189 73 tempitem.misc10 = 0;
8190 73 tempitem.wpn = 0;
8191 73 tempitem.wpn2 = 0;
8192 73 tempitem.wpn3 = 0;
8193 73 tempitem.wpn4 = 0;
8194 73 tempitem.wpn5 = 0;
8195 73 tempitem.wpn6 = 0;
8196 73 tempitem.wpn7 = 0;
8197 73 tempitem.wpn8 = 0;
8198 73 tempitem.wpn9 = 0;
8199 73 tempitem.wpn10 = 0;
8200 73 break;
8201 }
8202 case itype_boots:
8203 {
8204 73 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8205 73 tempitem.misc1 = 0;
8206 73 tempitem.misc2 = 0;
8207 73 tempitem.misc3 = 0;
8208 73 tempitem.misc4 = 0;
8209 73 tempitem.misc5 = 0;
8210 73 tempitem.misc6 = 0;
8211 73 tempitem.misc7 = 0;
8212 73 tempitem.misc8 = 0;
8213 73 tempitem.misc9 = 0;
8214 73 tempitem.misc10 = 0;
8215 73 tempitem.wpn = 0;
8216 73 tempitem.wpn2 = 0;
8217 73 tempitem.wpn3 = 0;
8218 73 tempitem.wpn4 = 0;
8219 73 tempitem.wpn5 = 0;
8220 73 tempitem.wpn6 = 0;
8221 73 tempitem.wpn7 = 0;
8222 73 tempitem.wpn8 = 0;
8223 73 tempitem.wpn9 = 0;
8224 73 tempitem.wpn10 = 0;
8225 73 break;
8226 }
8227 case itype_hookshot:
8228 {
8229 146 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8230 146 tempitem.misc5 = 0;
8231 146 tempitem.misc6 = 0;
8232 146 tempitem.misc7 = 0;
8233 146 tempitem.misc8 = 0;
8234 146 tempitem.misc9 = 0;
8235 146 tempitem.misc10 = 0;
8236 146 tempitem.wpn5 = 0;
8237 146 tempitem.wpn6 = 0;
8238 146 tempitem.wpn7 = 0;
8239 146 tempitem.wpn8 = 0;
8240 146 tempitem.wpn9 = 0;
8241 146 tempitem.wpn10 = 0;
8242 146 break;
8243 }
8244 case itype_lens:
8245 {
8246 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8247 73 tempitem.misc2 = 0;
8248 73 tempitem.misc3 = 0;
8249 73 tempitem.misc4 = 0;
8250 73 tempitem.misc5 = 0;
8251 73 tempitem.misc6 = 0;
8252 73 tempitem.misc7 = 0;
8253 73 tempitem.misc8 = 0;
8254 73 tempitem.misc9 = 0;
8255 73 tempitem.misc10 = 0;
8256 73 tempitem.wpn = 0;
8257 73 tempitem.wpn2 = 0;
8258 73 tempitem.wpn3 = 0;
8259 73 tempitem.wpn4 = 0;
8260 73 tempitem.wpn5 = 0;
8261 73 tempitem.wpn6 = 0;
8262 73 tempitem.wpn7 = 0;
8263 73 tempitem.wpn8 = 0;
8264 73 tempitem.wpn9 = 0;
8265 73 tempitem.wpn10 = 0;
8266 73 break;
8267 }
8268 case itype_hammer:
8269 {
8270 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8271 73 tempitem.misc1 = 0;
8272 73 tempitem.misc2 = 0;
8273 73 tempitem.misc3 = 0;
8274 73 tempitem.misc4 = 0;
8275 73 tempitem.misc5 = 0;
8276 73 tempitem.misc6 = 0;
8277 73 tempitem.misc7 = 0;
8278 73 tempitem.misc8 = 0;
8279 73 tempitem.misc9 = 0;
8280 73 tempitem.misc10 = 0;
8281 73 tempitem.wpn3 = 0;
8282 73 tempitem.wpn4 = 0;
8283 73 tempitem.wpn5 = 0;
8284 73 tempitem.wpn6 = 0;
8285 73 tempitem.wpn7 = 0;
8286 73 tempitem.wpn8 = 0;
8287 73 tempitem.wpn9 = 0;
8288 73 tempitem.wpn10 = 0;
8289 73 break;
8290 }
8291 case itype_dinsfire:
8292 {
8293 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG4 | ITEM_FLAG5);
8294 73 tempitem.misc3 = 0;
8295 73 tempitem.misc4 = 0;
8296 73 tempitem.misc5 = 0;
8297 73 tempitem.misc6 = 0;
8298 73 tempitem.misc7 = 0;
8299 73 tempitem.misc8 = 0;
8300 73 tempitem.misc9 = 0;
8301 73 tempitem.misc10 = 0;
8302 73 tempitem.wpn6 = 0;
8303 73 tempitem.wpn7 = 0;
8304 73 tempitem.wpn8 = 0;
8305 73 tempitem.wpn9 = 0;
8306 73 tempitem.wpn10 = 0;
8307 73 break;
8308 }
8309 case itype_faroreswind:
8310 {
8311 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8312 73 tempitem.misc2 = 0;
8313 73 tempitem.misc3 = 0;
8314 73 tempitem.misc4 = 0;
8315 73 tempitem.misc5 = 0;
8316 73 tempitem.misc6 = 0;
8317 73 tempitem.misc7 = 0;
8318 73 tempitem.misc8 = 0;
8319 73 tempitem.misc9 = 0;
8320 73 tempitem.misc10 = 0;
8321 73 tempitem.wpn = 0;
8322 73 tempitem.wpn2 = 0;
8323 73 tempitem.wpn3 = 0;
8324 73 tempitem.wpn4 = 0;
8325 73 tempitem.wpn5 = 0;
8326 73 tempitem.wpn6 = 0;
8327 73 tempitem.wpn7 = 0;
8328 73 tempitem.wpn8 = 0;
8329 73 tempitem.wpn9 = 0;
8330 73 tempitem.wpn10 = 0;
8331 73 break;
8332 }
8333 case itype_nayruslove:
8334 {
8335 73 tempitem.flags &= ~ (ITEM_FLAG5);
8336 73 tempitem.misc2 = 0;
8337 73 tempitem.misc3 = 0;
8338 73 tempitem.misc4 = 0;
8339 73 tempitem.misc5 = 0;
8340 73 tempitem.misc6 = 0;
8341 73 tempitem.misc7 = 0;
8342 73 tempitem.misc8 = 0;
8343 73 tempitem.misc9 = 0;
8344 73 tempitem.misc10 = 0;
8345 73 break;
8346 }
8347 case itype_bomb:
8348 {
8349 88 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8350 88 tempitem.misc4 = 0;
8351 88 tempitem.misc5 = 0;
8352 88 tempitem.misc6 = 0;
8353 88 tempitem.misc7 = 0;
8354 88 tempitem.misc8 = 0;
8355 88 tempitem.misc9 = 0;
8356 88 tempitem.misc10 = 0;
8357 88 tempitem.wpn3 = 0;
8358 88 tempitem.wpn4 = 0;
8359 88 tempitem.wpn5 = 0;
8360 88 tempitem.wpn6 = 0;
8361 88 tempitem.wpn7 = 0;
8362 88 tempitem.wpn8 = 0;
8363 88 tempitem.wpn9 = 0;
8364 88 tempitem.wpn10 = 0;
8365 88 break;
8366 }
8367 case itype_sbomb:
8368 {
8369 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8370 73 tempitem.misc4 = 0;
8371 73 tempitem.misc5 = 0;
8372 73 tempitem.misc6 = 0;
8373 73 tempitem.misc7 = 0;
8374 73 tempitem.misc8 = 0;
8375 73 tempitem.misc9 = 0;
8376 73 tempitem.misc10 = 0;
8377 73 tempitem.wpn3 = 0;
8378 73 tempitem.wpn4 = 0;
8379 73 tempitem.wpn5 = 0;
8380 73 tempitem.wpn6 = 0;
8381 73 tempitem.wpn7 = 0;
8382 73 tempitem.wpn8 = 0;
8383 73 tempitem.wpn9 = 0;
8384 73 tempitem.wpn10 = 0;
8385 73 break;
8386 }
8387 case itype_clock:
8388 {
8389 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8390 73 tempitem.misc2 = 0;
8391 73 tempitem.misc3 = 0;
8392 73 tempitem.misc4 = 0;
8393 73 tempitem.misc5 = 0;
8394 73 tempitem.misc6 = 0;
8395 73 tempitem.misc7 = 0;
8396 73 tempitem.misc8 = 0;
8397 73 tempitem.misc9 = 0;
8398 73 tempitem.misc10 = 0;
8399 73 tempitem.wpn = 0;
8400 73 tempitem.wpn2 = 0;
8401 73 tempitem.wpn3 = 0;
8402 73 tempitem.wpn4 = 0;
8403 73 tempitem.wpn5 = 0;
8404 73 tempitem.wpn6 = 0;
8405 73 tempitem.wpn7 = 0;
8406 73 tempitem.wpn8 = 0;
8407 73 tempitem.wpn9 = 0;
8408 73 tempitem.wpn10 = 0;
8409 73 break;
8410 }
8411 case itype_key:
8412 {
8413 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8414 73 tempitem.misc1 = 0;
8415 73 tempitem.misc2 = 0;
8416 73 tempitem.misc3 = 0;
8417 73 tempitem.misc4 = 0;
8418 73 tempitem.misc5 = 0;
8419 73 tempitem.misc6 = 0;
8420 73 tempitem.misc7 = 0;
8421 73 tempitem.misc8 = 0;
8422 73 tempitem.misc9 = 0;
8423 73 tempitem.misc10 = 0;
8424 73 tempitem.wpn = 0;
8425 73 tempitem.wpn2 = 0;
8426 73 tempitem.wpn3 = 0;
8427 73 tempitem.wpn4 = 0;
8428 73 tempitem.wpn5 = 0;
8429 73 tempitem.wpn6 = 0;
8430 73 tempitem.wpn7 = 0;
8431 73 tempitem.wpn8 = 0;
8432 73 tempitem.wpn9 = 0;
8433 73 tempitem.wpn10 = 0;
8434 73 break;
8435 }
8436 case itype_magiccontainer:
8437 {
8438 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8439 73 tempitem.misc1 = 0;
8440 73 tempitem.misc2 = 0;
8441 73 tempitem.misc3 = 0;
8442 73 tempitem.misc4 = 0;
8443 73 tempitem.misc5 = 0;
8444 73 tempitem.misc6 = 0;
8445 73 tempitem.misc7 = 0;
8446 73 tempitem.misc8 = 0;
8447 73 tempitem.misc9 = 0;
8448 73 tempitem.misc10 = 0;
8449 73 tempitem.wpn = 0;
8450 73 tempitem.wpn2 = 0;
8451 73 tempitem.wpn3 = 0;
8452 73 tempitem.wpn4 = 0;
8453 73 tempitem.wpn5 = 0;
8454 73 tempitem.wpn6 = 0;
8455 73 tempitem.wpn7 = 0;
8456 73 tempitem.wpn8 = 0;
8457 73 tempitem.wpn9 = 0;
8458 73 tempitem.wpn10 = 0;
8459 73 break;
8460 }
8461 case itype_triforcepiece:
8462 {
8463 146 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8464 146 tempitem.misc3 = 0;
8465 146 tempitem.misc4 = 0;
8466 146 tempitem.misc5 = 0;
8467 146 tempitem.misc6 = 0;
8468 146 tempitem.misc7 = 0;
8469 146 tempitem.misc8 = 0;
8470 146 tempitem.misc9 = 0;
8471 146 tempitem.misc10 = 0;
8472 146 tempitem.wpn = 0;
8473 146 tempitem.wpn2 = 0;
8474 146 tempitem.wpn3 = 0;
8475 146 tempitem.wpn4 = 0;
8476 146 tempitem.wpn5 = 0;
8477 146 tempitem.wpn6 = 0;
8478 146 tempitem.wpn7 = 0;
8479 146 tempitem.wpn8 = 0;
8480 146 tempitem.wpn9 = 0;
8481 146 tempitem.wpn10 = 0;
8482 146 break;
8483 }
8484 case itype_map: case itype_compass: case itype_bosskey:
8485 {
8486 219 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8487 219 tempitem.misc1 = 0;
8488 219 tempitem.misc2 = 0;
8489 219 tempitem.misc3 = 0;
8490 219 tempitem.misc4 = 0;
8491 219 tempitem.misc5 = 0;
8492 219 tempitem.misc6 = 0;
8493 219 tempitem.misc7 = 0;
8494 219 tempitem.misc8 = 0;
8495 219 tempitem.misc9 = 0;
8496 219 tempitem.misc10 = 0;
8497 219 tempitem.wpn = 0;
8498 219 tempitem.wpn2 = 0;
8499 219 tempitem.wpn3 = 0;
8500 219 tempitem.wpn4 = 0;
8501 219 tempitem.wpn5 = 0;
8502 219 tempitem.wpn6 = 0;
8503 219 tempitem.wpn7 = 0;
8504 219 tempitem.wpn8 = 0;
8505 219 tempitem.wpn9 = 0;
8506 219 tempitem.wpn10 = 0;
8507 219 break;
8508 }
8509 case itype_quiver:
8510 {
8511 292 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8512 292 tempitem.misc3 = 0;
8513 292 tempitem.misc4 = 0;
8514 292 tempitem.misc5 = 0;
8515 292 tempitem.misc6 = 0;
8516 292 tempitem.misc7 = 0;
8517 292 tempitem.misc8 = 0;
8518 292 tempitem.misc9 = 0;
8519 292 tempitem.misc10 = 0;
8520 292 tempitem.wpn = 0;
8521 292 tempitem.wpn2 = 0;
8522 292 tempitem.wpn3 = 0;
8523 292 tempitem.wpn4 = 0;
8524 292 tempitem.wpn5 = 0;
8525 292 tempitem.wpn6 = 0;
8526 292 tempitem.wpn7 = 0;
8527 292 tempitem.wpn8 = 0;
8528 292 tempitem.wpn9 = 0;
8529 292 tempitem.wpn10 = 0;
8530 292 break;
8531 }
8532 case itype_lkey:
8533 {
8534 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8535 73 tempitem.misc1 = 0;
8536 73 tempitem.misc2 = 0;
8537 73 tempitem.misc3 = 0;
8538 73 tempitem.misc4 = 0;
8539 73 tempitem.misc5 = 0;
8540 73 tempitem.misc6 = 0;
8541 73 tempitem.misc7 = 0;
8542 73 tempitem.misc8 = 0;
8543 73 tempitem.misc9 = 0;
8544 73 tempitem.misc10 = 0;
8545 73 tempitem.wpn = 0;
8546 73 tempitem.wpn2 = 0;
8547 73 tempitem.wpn3 = 0;
8548 73 tempitem.wpn4 = 0;
8549 73 tempitem.wpn5 = 0;
8550 73 tempitem.wpn6 = 0;
8551 73 tempitem.wpn7 = 0;
8552 73 tempitem.wpn8 = 0;
8553 73 tempitem.wpn9 = 0;
8554 73 tempitem.wpn10 = 0;
8555 73 break;
8556 }
8557 case itype_cbyrna:
8558 {
8559 73 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG5);
8560 73 tempitem.misc4 = 0;
8561 73 tempitem.misc5 = 0;
8562 73 tempitem.misc6 = 0;
8563 73 tempitem.misc7 = 0;
8564 73 tempitem.misc8 = 0;
8565 73 tempitem.misc9 = 0;
8566 73 tempitem.misc10 = 0;
8567 73 tempitem.wpn6 = 0;
8568 73 tempitem.wpn7 = 0;
8569 73 tempitem.wpn8 = 0;
8570 73 tempitem.wpn9 = 0;
8571 73 tempitem.wpn10 = 0;
8572 73 break;
8573 }
8574 case itype_rupee: case itype_arrowammo:
8575 {
8576 926 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8577 926 tempitem.misc1 = 0;
8578 926 tempitem.misc2 = 0;
8579 926 tempitem.misc3 = 0;
8580 926 tempitem.misc4 = 0;
8581 926 tempitem.misc5 = 0;
8582 926 tempitem.misc6 = 0;
8583 926 tempitem.misc7 = 0;
8584 926 tempitem.misc8 = 0;
8585 926 tempitem.misc9 = 0;
8586 926 tempitem.misc10 = 0;
8587 926 tempitem.wpn = 0;
8588 926 tempitem.wpn2 = 0;
8589 926 tempitem.wpn3 = 0;
8590 926 tempitem.wpn4 = 0;
8591 926 tempitem.wpn5 = 0;
8592 926 tempitem.wpn6 = 0;
8593 926 tempitem.wpn7 = 0;
8594 926 tempitem.wpn8 = 0;
8595 926 tempitem.wpn9 = 0;
8596 926 tempitem.wpn10 = 0;
8597 926 break;
8598 }
8599 case itype_fairy:
8600 {
8601 128 tempitem.flags &= ~ (ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8602 128 tempitem.misc4 = 0;
8603 128 tempitem.misc5 = 0;
8604 128 tempitem.misc6 = 0;
8605 128 tempitem.misc7 = 0;
8606 128 tempitem.misc8 = 0;
8607 128 tempitem.misc9 = 0;
8608 128 tempitem.misc10 = 0;
8609 128 tempitem.wpn = 0;
8610 128 tempitem.wpn2 = 0;
8611 128 tempitem.wpn3 = 0;
8612 128 tempitem.wpn4 = 0;
8613 128 tempitem.wpn5 = 0;
8614 128 tempitem.wpn6 = 0;
8615 128 tempitem.wpn7 = 0;
8616 128 tempitem.wpn8 = 0;
8617 128 tempitem.wpn9 = 0;
8618 128 tempitem.wpn10 = 0;
8619 128 break;
8620 }
8621 case itype_magic: case itype_heart: case itype_heartcontainer: case itype_heartpiece: case itype_killem: case itype_bombammo:
8622 {
8623 787 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8624 787 tempitem.misc1 = 0;
8625 787 tempitem.misc2 = 0;
8626 787 tempitem.misc3 = 0;
8627 787 tempitem.misc4 = 0;
8628 787 tempitem.misc5 = 0;
8629 787 tempitem.misc6 = 0;
8630 787 tempitem.misc7 = 0;
8631 787 tempitem.misc8 = 0;
8632 787 tempitem.misc9 = 0;
8633 787 tempitem.misc10 = 0;
8634 787 tempitem.wpn = 0;
8635 787 tempitem.wpn2 = 0;
8636 787 tempitem.wpn3 = 0;
8637 787 tempitem.wpn4 = 0;
8638 787 tempitem.wpn5 = 0;
8639 787 tempitem.wpn6 = 0;
8640 787 tempitem.wpn7 = 0;
8641 787 tempitem.wpn8 = 0;
8642 787 tempitem.wpn9 = 0;
8643 787 tempitem.wpn10 = 0;
8644 787 break;
8645 }
8646 case itype_bombbag:
8647 {
8648 292 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8649 292 tempitem.misc3 = 0;
8650 292 tempitem.misc4 = 0;
8651 292 tempitem.misc5 = 0;
8652 292 tempitem.misc6 = 0;
8653 292 tempitem.misc7 = 0;
8654 292 tempitem.misc8 = 0;
8655 292 tempitem.misc9 = 0;
8656 292 tempitem.misc10 = 0;
8657 292 tempitem.wpn = 0;
8658 292 tempitem.wpn2 = 0;
8659 292 tempitem.wpn3 = 0;
8660 292 tempitem.wpn4 = 0;
8661 292 tempitem.wpn5 = 0;
8662 292 tempitem.wpn6 = 0;
8663 292 tempitem.wpn7 = 0;
8664 292 tempitem.wpn8 = 0;
8665 292 tempitem.wpn9 = 0;
8666 292 tempitem.wpn10 = 0;
8667 292 break;
8668 }
8669 case itype_rocs:
8670 {
8671 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8672 73 tempitem.misc1 = 0;
8673 73 tempitem.misc2 = 0;
8674 73 tempitem.misc3 = 0;
8675 73 tempitem.misc4 = 0;
8676 73 tempitem.misc5 = 0;
8677 73 tempitem.misc6 = 0;
8678 73 tempitem.misc7 = 0;
8679 73 tempitem.misc8 = 0;
8680 73 tempitem.misc9 = 0;
8681 73 tempitem.misc10 = 0;
8682 73 tempitem.wpn = 0;
8683 73 tempitem.wpn2 = 0;
8684 73 tempitem.wpn3 = 0;
8685 73 tempitem.wpn4 = 0;
8686 73 tempitem.wpn5 = 0;
8687 73 tempitem.wpn6 = 0;
8688 73 tempitem.wpn7 = 0;
8689 73 tempitem.wpn8 = 0;
8690 73 tempitem.wpn9 = 0;
8691 73 tempitem.wpn10 = 0;
8692 73 break;
8693 }
8694 case itype_hoverboots:
8695 {
8696 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8697 73 tempitem.misc2 = 0;
8698 73 tempitem.misc3 = 0;
8699 73 tempitem.misc4 = 0;
8700 73 tempitem.misc5 = 0;
8701 73 tempitem.misc6 = 0;
8702 73 tempitem.misc7 = 0;
8703 73 tempitem.misc8 = 0;
8704 73 tempitem.misc9 = 0;
8705 73 tempitem.misc10 = 0;
8706 73 tempitem.wpn2 = 0;
8707 73 tempitem.wpn3 = 0;
8708 73 tempitem.wpn4 = 0;
8709 73 tempitem.wpn5 = 0;
8710 73 tempitem.wpn6 = 0;
8711 73 tempitem.wpn7 = 0;
8712 73 tempitem.wpn8 = 0;
8713 73 tempitem.wpn9 = 0;
8714 73 tempitem.wpn10 = 0;
8715 73 break;
8716 }
8717 case itype_spinscroll:
8718 {
8719 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8720 73 tempitem.misc2 = 0;
8721 73 tempitem.misc3 = 0;
8722 73 tempitem.misc4 = 0;
8723 73 tempitem.misc5 = 0;
8724 73 tempitem.misc6 = 0;
8725 73 tempitem.misc7 = 0;
8726 73 tempitem.misc8 = 0;
8727 73 tempitem.misc9 = 0;
8728 73 tempitem.misc10 = 0;
8729 73 tempitem.wpn = 0;
8730 73 tempitem.wpn2 = 0;
8731 73 tempitem.wpn3 = 0;
8732 73 tempitem.wpn4 = 0;
8733 73 tempitem.wpn5 = 0;
8734 73 tempitem.wpn6 = 0;
8735 73 tempitem.wpn7 = 0;
8736 73 tempitem.wpn8 = 0;
8737 73 tempitem.wpn9 = 0;
8738 73 tempitem.wpn10 = 0;
8739 73 break;
8740 }
8741 case itype_crossscroll:
8742 {
8743 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8744 73 tempitem.misc1 = 0;
8745 73 tempitem.misc2 = 0;
8746 73 tempitem.misc3 = 0;
8747 73 tempitem.misc4 = 0;
8748 73 tempitem.misc5 = 0;
8749 73 tempitem.misc6 = 0;
8750 73 tempitem.misc7 = 0;
8751 73 tempitem.misc8 = 0;
8752 73 tempitem.misc9 = 0;
8753 73 tempitem.misc10 = 0;
8754 73 tempitem.wpn = 0;
8755 73 tempitem.wpn2 = 0;
8756 73 tempitem.wpn3 = 0;
8757 73 tempitem.wpn4 = 0;
8758 73 tempitem.wpn5 = 0;
8759 73 tempitem.wpn6 = 0;
8760 73 tempitem.wpn7 = 0;
8761 73 tempitem.wpn8 = 0;
8762 73 tempitem.wpn9 = 0;
8763 73 tempitem.wpn10 = 0;
8764 73 break;
8765 }
8766 case itype_quakescroll:
8767 {
8768 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8769 73 tempitem.misc3 = 0;
8770 73 tempitem.misc4 = 0;
8771 73 tempitem.misc5 = 0;
8772 73 tempitem.misc6 = 0;
8773 73 tempitem.misc7 = 0;
8774 73 tempitem.misc8 = 0;
8775 73 tempitem.misc9 = 0;
8776 73 tempitem.misc10 = 0;
8777 73 tempitem.wpn = 0;
8778 73 tempitem.wpn2 = 0;
8779 73 tempitem.wpn3 = 0;
8780 73 tempitem.wpn4 = 0;
8781 73 tempitem.wpn5 = 0;
8782 73 tempitem.wpn6 = 0;
8783 73 tempitem.wpn7 = 0;
8784 73 tempitem.wpn8 = 0;
8785 73 tempitem.wpn9 = 0;
8786 73 tempitem.wpn10 = 0;
8787 73 break;
8788 }
8789 case itype_whispring:
8790 {
8791 146 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8792 146 tempitem.misc2 = 0;
8793 146 tempitem.misc3 = 0;
8794 146 tempitem.misc4 = 0;
8795 146 tempitem.misc5 = 0;
8796 146 tempitem.misc6 = 0;
8797 146 tempitem.misc7 = 0;
8798 146 tempitem.misc8 = 0;
8799 146 tempitem.misc9 = 0;
8800 146 tempitem.misc10 = 0;
8801 146 tempitem.wpn = 0;
8802 146 tempitem.wpn2 = 0;
8803 146 tempitem.wpn3 = 0;
8804 146 tempitem.wpn4 = 0;
8805 146 tempitem.wpn5 = 0;
8806 146 tempitem.wpn6 = 0;
8807 146 tempitem.wpn7 = 0;
8808 146 tempitem.wpn8 = 0;
8809 146 tempitem.wpn9 = 0;
8810 146 tempitem.wpn10 = 0;
8811 146 break;
8812 }
8813 case itype_chargering:
8814 {
8815 146 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8816 146 tempitem.misc3 = 0;
8817 146 tempitem.misc4 = 0;
8818 146 tempitem.misc5 = 0;
8819 146 tempitem.misc6 = 0;
8820 146 tempitem.misc7 = 0;
8821 146 tempitem.misc8 = 0;
8822 146 tempitem.misc9 = 0;
8823 146 tempitem.misc10 = 0;
8824 146 tempitem.wpn = 0;
8825 146 tempitem.wpn2 = 0;
8826 146 tempitem.wpn3 = 0;
8827 146 tempitem.wpn4 = 0;
8828 146 tempitem.wpn5 = 0;
8829 146 tempitem.wpn6 = 0;
8830 146 tempitem.wpn7 = 0;
8831 146 tempitem.wpn8 = 0;
8832 146 tempitem.wpn9 = 0;
8833 146 tempitem.wpn10 = 0;
8834 146 break;
8835 }
8836 case itype_perilscroll:
8837 {
8838 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8839 73 tempitem.misc2 = 0;
8840 73 tempitem.misc3 = 0;
8841 73 tempitem.misc4 = 0;
8842 73 tempitem.misc5 = 0;
8843 73 tempitem.misc6 = 0;
8844 73 tempitem.misc7 = 0;
8845 73 tempitem.misc8 = 0;
8846 73 tempitem.misc9 = 0;
8847 73 tempitem.misc10 = 0;
8848 73 tempitem.wpn = 0;
8849 73 tempitem.wpn2 = 0;
8850 73 tempitem.wpn3 = 0;
8851 73 tempitem.wpn4 = 0;
8852 73 tempitem.wpn5 = 0;
8853 73 tempitem.wpn6 = 0;
8854 73 tempitem.wpn7 = 0;
8855 73 tempitem.wpn8 = 0;
8856 73 tempitem.wpn9 = 0;
8857 73 tempitem.wpn10 = 0;
8858 73 break;
8859 }
8860 case itype_wealthmedal:
8861 {
8862 219 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8863 219 tempitem.misc2 = 0;
8864 219 tempitem.misc3 = 0;
8865 219 tempitem.misc4 = 0;
8866 219 tempitem.misc5 = 0;
8867 219 tempitem.misc6 = 0;
8868 219 tempitem.misc7 = 0;
8869 219 tempitem.misc8 = 0;
8870 219 tempitem.misc9 = 0;
8871 219 tempitem.misc10 = 0;
8872 219 tempitem.wpn = 0;
8873 219 tempitem.wpn2 = 0;
8874 219 tempitem.wpn3 = 0;
8875 219 tempitem.wpn4 = 0;
8876 219 tempitem.wpn5 = 0;
8877 219 tempitem.wpn6 = 0;
8878 219 tempitem.wpn7 = 0;
8879 219 tempitem.wpn8 = 0;
8880 219 tempitem.wpn9 = 0;
8881 219 tempitem.wpn10 = 0;
8882 219 break;
8883 }
8884 case itype_heartring:
8885 {
8886 219 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8887 219 tempitem.misc3 = 0;
8888 219 tempitem.misc4 = 0;
8889 219 tempitem.misc5 = 0;
8890 219 tempitem.misc6 = 0;
8891 219 tempitem.misc7 = 0;
8892 219 tempitem.misc8 = 0;
8893 219 tempitem.misc9 = 0;
8894 219 tempitem.misc10 = 0;
8895 219 tempitem.wpn = 0;
8896 219 tempitem.wpn2 = 0;
8897 219 tempitem.wpn3 = 0;
8898 219 tempitem.wpn4 = 0;
8899 219 tempitem.wpn5 = 0;
8900 219 tempitem.wpn6 = 0;
8901 219 tempitem.wpn7 = 0;
8902 219 tempitem.wpn8 = 0;
8903 219 tempitem.wpn9 = 0;
8904 219 tempitem.wpn10 = 0;
8905 219 break;
8906 }
8907 case itype_magicring:
8908 {
8909 292 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8910 292 tempitem.misc3 = 0;
8911 292 tempitem.misc4 = 0;
8912 292 tempitem.misc5 = 0;
8913 292 tempitem.misc6 = 0;
8914 292 tempitem.misc7 = 0;
8915 292 tempitem.misc8 = 0;
8916 292 tempitem.misc9 = 0;
8917 292 tempitem.misc10 = 0;
8918 292 tempitem.wpn = 0;
8919 292 tempitem.wpn2 = 0;
8920 292 tempitem.wpn3 = 0;
8921 292 tempitem.wpn4 = 0;
8922 292 tempitem.wpn5 = 0;
8923 292 tempitem.wpn6 = 0;
8924 292 tempitem.wpn7 = 0;
8925 292 tempitem.wpn8 = 0;
8926 292 tempitem.wpn9 = 0;
8927 292 tempitem.wpn10 = 0;
8928 292 break;
8929 }
8930 case itype_spinscroll2:
8931 {
8932 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8933 73 tempitem.misc2 = 0;
8934 73 tempitem.misc3 = 0;
8935 73 tempitem.misc4 = 0;
8936 73 tempitem.misc5 = 0;
8937 73 tempitem.misc6 = 0;
8938 73 tempitem.misc7 = 0;
8939 73 tempitem.misc8 = 0;
8940 73 tempitem.misc9 = 0;
8941 73 tempitem.misc10 = 0;
8942 73 tempitem.wpn = 0;
8943 73 tempitem.wpn2 = 0;
8944 73 tempitem.wpn3 = 0;
8945 73 tempitem.wpn4 = 0;
8946 73 tempitem.wpn5 = 0;
8947 73 tempitem.wpn6 = 0;
8948 73 tempitem.wpn7 = 0;
8949 73 tempitem.wpn8 = 0;
8950 73 tempitem.wpn9 = 0;
8951 73 tempitem.wpn10 = 0;
8952 73 break;
8953 }
8954 case itype_quakescroll2:
8955 {
8956 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8957 73 tempitem.misc3 = 0;
8958 73 tempitem.misc4 = 0;
8959 73 tempitem.misc5 = 0;
8960 73 tempitem.misc6 = 0;
8961 73 tempitem.misc7 = 0;
8962 73 tempitem.misc8 = 0;
8963 73 tempitem.misc9 = 0;
8964 73 tempitem.misc10 = 0;
8965 73 tempitem.wpn = 0;
8966 73 tempitem.wpn2 = 0;
8967 73 tempitem.wpn3 = 0;
8968 73 tempitem.wpn4 = 0;
8969 73 tempitem.wpn5 = 0;
8970 73 tempitem.wpn6 = 0;
8971 73 tempitem.wpn7 = 0;
8972 73 tempitem.wpn8 = 0;
8973 73 tempitem.wpn9 = 0;
8974 73 tempitem.wpn10 = 0;
8975 73 break;
8976 }
8977 case itype_agony:
8978 {
8979 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8980 73 tempitem.misc2 = 0;
8981 73 tempitem.misc3 = 0;
8982 73 tempitem.misc4 = 0;
8983 73 tempitem.misc5 = 0;
8984 73 tempitem.misc6 = 0;
8985 73 tempitem.misc7 = 0;
8986 73 tempitem.misc8 = 0;
8987 73 tempitem.misc9 = 0;
8988 73 tempitem.misc10 = 0;
8989 73 tempitem.wpn = 0;
8990 73 tempitem.wpn2 = 0;
8991 73 tempitem.wpn3 = 0;
8992 73 tempitem.wpn4 = 0;
8993 73 tempitem.wpn5 = 0;
8994 73 tempitem.wpn6 = 0;
8995 73 tempitem.wpn7 = 0;
8996 73 tempitem.wpn8 = 0;
8997 73 tempitem.wpn9 = 0;
8998 73 tempitem.wpn10 = 0;
8999 73 break;
9000 }
9001 case itype_stompboots:
9002 {
9003 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
9004 73 tempitem.misc1 = 0;
9005 73 tempitem.misc2 = 0;
9006 73 tempitem.misc3 = 0;
9007 73 tempitem.misc4 = 0;
9008 73 tempitem.misc5 = 0;
9009 73 tempitem.misc6 = 0;
9010 73 tempitem.misc7 = 0;
9011 73 tempitem.misc8 = 0;
9012 73 tempitem.misc9 = 0;
9013 73 tempitem.misc10 = 0;
9014 73 tempitem.wpn = 0;
9015 73 tempitem.wpn2 = 0;
9016 73 tempitem.wpn3 = 0;
9017 73 tempitem.wpn4 = 0;
9018 73 tempitem.wpn5 = 0;
9019 73 tempitem.wpn6 = 0;
9020 73 tempitem.wpn7 = 0;
9021 73 tempitem.wpn8 = 0;
9022 73 tempitem.wpn9 = 0;
9023 73 tempitem.wpn10 = 0;
9024 73 break;
9025 }
9026 case itype_whimsicalring:
9027 {
9028 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
9029 73 tempitem.misc2 = 0;
9030 73 tempitem.misc3 = 0;
9031 73 tempitem.misc4 = 0;
9032 73 tempitem.misc5 = 0;
9033 73 tempitem.misc6 = 0;
9034 73 tempitem.misc7 = 0;
9035 73 tempitem.misc8 = 0;
9036 73 tempitem.misc9 = 0;
9037 73 tempitem.misc10 = 0;
9038 73 tempitem.wpn = 0;
9039 73 tempitem.wpn2 = 0;
9040 73 tempitem.wpn3 = 0;
9041 73 tempitem.wpn4 = 0;
9042 73 tempitem.wpn5 = 0;
9043 73 tempitem.wpn6 = 0;
9044 73 tempitem.wpn7 = 0;
9045 73 tempitem.wpn8 = 0;
9046 73 tempitem.wpn9 = 0;
9047 73 tempitem.wpn10 = 0;
9048 73 break;
9049 }
9050 case itype_perilring:
9051 {
9052 73 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
9053 73 tempitem.misc2 = 0;
9054 73 tempitem.misc3 = 0;
9055 73 tempitem.misc4 = 0;
9056 73 tempitem.misc5 = 0;
9057 73 tempitem.misc6 = 0;
9058 73 tempitem.misc7 = 0;
9059 73 tempitem.misc8 = 0;
9060 73 tempitem.misc9 = 0;
9061 73 tempitem.misc10 = 0;
9062 73 tempitem.wpn = 0;
9063 73 tempitem.wpn2 = 0;
9064 73 tempitem.wpn3 = 0;
9065 73 tempitem.wpn4 = 0;
9066 73 tempitem.wpn5 = 0;
9067 73 tempitem.wpn6 = 0;
9068 73 tempitem.wpn7 = 0;
9069 73 tempitem.wpn8 = 0;
9070 73 tempitem.wpn9 = 0;
9071 73 tempitem.wpn10 = 0;
9072 73 break;
9073 }
9074 case itype_custom1: case itype_custom2: case itype_custom3: case itype_custom4: case itype_custom5:
9075 case itype_custom6: case itype_custom7: case itype_custom8: case itype_custom9: case itype_custom10:
9076 case itype_custom11: case itype_custom12: case itype_custom13: case itype_custom14: case itype_custom15:
9077 case itype_custom16: case itype_custom17: case itype_custom18: case itype_custom19: case itype_custom20:
9078 case itype_bowandarrow: case itype_letterpotion: case itype_misc:
9079 {
9080 1882 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
9081 1882 tempitem.misc1 = 0;
9082 1882 tempitem.misc2 = 0;
9083 1882 tempitem.misc3 = 0;
9084 1882 tempitem.misc4 = 0;
9085 1882 tempitem.misc5 = 0;
9086 1882 tempitem.misc6 = 0;
9087 1882 tempitem.misc7 = 0;
9088 1882 tempitem.misc8 = 0;
9089 1882 tempitem.misc9 = 0;
9090 1882 tempitem.misc10 = 0;
9091 1882 tempitem.wpn = 0;
9092 1882 tempitem.wpn2 = 0;
9093 1882 tempitem.wpn3 = 0;
9094 1882 tempitem.wpn4 = 0;
9095 1882 tempitem.wpn5 = 0;
9096 1882 tempitem.wpn6 = 0;
9097 1882 tempitem.wpn7 = 0;
9098 1882 tempitem.wpn8 = 0;
9099 1882 tempitem.wpn9 = 0;
9100 1882 tempitem.wpn10 = 0;
9101 1882 break;
9102 }
9103 }
9104 18688 }
9105 //Port quest rules to items
9106
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if( s_version <= 31)
9107 {
9108
2/2
✓ Branch 0 taken 88 times.
✓ Branch 1 taken 18600 times.
18688 if(tempitem.family == itype_bomb)
9109 {
9110
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 85 times.
88 if ( get_bit(quest_rules,qr_OUCHBOMBS) ) tempitem.flags |= ITEM_FLAG2;
9111 85 else tempitem.flags &= ~ ITEM_FLAG2;
9112 88 }
9113
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 18527 times.
18600 else if(tempitem.family == itype_sbomb)
9114 {
9115
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 70 times.
73 if ( get_bit(quest_rules,qr_OUCHBOMBS) ) tempitem.flags |= ITEM_FLAG2;
9116 70 else tempitem.flags &= ~ ITEM_FLAG2;
9117 73 }
9118
9119
2/2
✓ Branch 0 taken 219 times.
✓ Branch 1 taken 18308 times.
18527 else if(tempitem.family == itype_brang)
9120 {
9121
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 219 times.
219 if ( get_bit(quest_rules,qr_BRANGPICKUP) ) tempitem.flags |= ITEM_FLAG4;
9122 219 else tempitem.flags &= ~ ITEM_FLAG4;
9123 219 }
9124
2/2
✓ Branch 0 taken 18220 times.
✓ Branch 1 taken 88 times.
18308 else if(tempitem.family == itype_wand)
9125 {
9126
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 87 times.
88 if ( get_bit(quest_rules,qr_NOWANDMELEE) ) tempitem.flags |= ITEM_FLAG3;
9127 87 else tempitem.flags &= ~ ITEM_FLAG3;
9128 88 }
9129 18688 }
9130
9131 //Port quest rules to items
9132
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if( s_version <= 37)
9133 {
9134
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 18615 times.
18688 if(tempitem.family == itype_flippers)
9135 {
9136
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if ( (get_bit(quest_rules,qr_NODIVING)) ) tempitem.flags |= ITEM_FLAG1;
9137 73 else tempitem.flags &= ~ ITEM_FLAG1;
9138 73 }
9139
2/2
✓ Branch 0 taken 12576 times.
✓ Branch 1 taken 6039 times.
18615 else if(tempitem.family == itype_sword)
9140 {
9141
2/2
✓ Branch 0 taken 69 times.
✓ Branch 1 taken 5970 times.
6039 if ( (get_bit(quest_rules,qr_QUICKSWORD)) ) tempitem.flags |= ITEM_FLAG5;
9142 5970 else tempitem.flags &= ~ ITEM_FLAG5;
9143 6039 }
9144
2/2
✓ Branch 0 taken 88 times.
✓ Branch 1 taken 12488 times.
12576 else if(tempitem.family == itype_wand)
9145 {
9146
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 85 times.
88 if ( (get_bit(quest_rules,qr_QUICKSWORD)) ) tempitem.flags |= ITEM_FLAG5;
9147 85 else tempitem.flags &= ~ ITEM_FLAG5;
9148 88 }
9149
4/4
✓ Branch 0 taken 12400 times.
✓ Branch 1 taken 88 times.
✓ Branch 2 taken 184 times.
✓ Branch 3 taken 12216 times.
12488 else if(tempitem.family == itype_book || tempitem.family == itype_candle)
9150 {
9151 //@Emily: What was qrFIREPROOFHERO2 again, and does that also need to enable this?
9152
2/2
✓ Branch 0 taken 57 times.
✓ Branch 1 taken 215 times.
272 if ( (get_bit(quest_rules,qr_FIREPROOFHERO)) ) tempitem.flags |= ITEM_FLAG3;
9153 215 else tempitem.flags &= ~ ITEM_FLAG3;
9154 272 }
9155 18688 }
9156
9157
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if( s_version < 38)
9158 {
9159
4/4
✓ Branch 0 taken 18469 times.
✓ Branch 1 taken 219 times.
✓ Branch 2 taken 146 times.
✓ Branch 3 taken 18323 times.
18688 if(tempitem.family == itype_brang || tempitem.family == itype_hookshot)
9160 {
9161
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 365 times.
365 if(get_bit(quest_rules,qr_BRANGPICKUP)) tempitem.flags |= ITEM_FLAG4;
9162 365 else tempitem.flags &= ~ITEM_FLAG4;
9163
9164
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 360 times.
365 if(get_bit(quest_rules,qr_Z3BRANG_HSHOT)) tempitem.flags |= ITEM_FLAG5 | ITEM_FLAG6;
9165 360 else tempitem.flags &= ~(ITEM_FLAG5|ITEM_FLAG6);
9166 365 }
9167
2/2
✓ Branch 0 taken 18106 times.
✓ Branch 1 taken 217 times.
18323 else if(tempitem.family == itype_arrow)
9168 {
9169
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 217 times.
217 if(get_bit(quest_rules,qr_BRANGPICKUP)) tempitem.flags |= ITEM_FLAG4;
9170 217 else tempitem.flags &= ~ITEM_FLAG4;
9171
9172
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 216 times.
217 if(get_bit(quest_rules,qr_Z3BRANG_HSHOT)) tempitem.flags &= ~ITEM_FLAG2;
9173 216 else tempitem.flags |= ITEM_FLAG2;
9174 217 }
9175 18688 }
9176
9177
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if( s_version < 39)
9178 {
9179
6/6
✓ Branch 0 taken 18615 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 18527 times.
✓ Branch 3 taken 88 times.
✓ Branch 4 taken 184 times.
✓ Branch 5 taken 18343 times.
18688 if(tempitem.family == itype_dinsfire || tempitem.family == itype_book || tempitem.family == itype_candle)
9180 {
9181
2/2
✓ Branch 0 taken 333 times.
✓ Branch 1 taken 12 times.
345 if(get_bit(quest_rules,qr_TEMPCANDLELIGHT)) tempitem.flags |= ITEM_FLAG5;
9182 333 else tempitem.flags &= ~ITEM_FLAG5;
9183 345 }
9184
2/2
✓ Branch 0 taken 145 times.
✓ Branch 1 taken 18198 times.
18343 else if(tempitem.family == itype_potion)
9185 {
9186
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 139 times.
145 if(get_bit(quest_rules,qr_NONBUBBLEMEDICINE))
9187 {
9188 6 tempitem.flags &= ~(ITEM_FLAG3|ITEM_FLAG4);
9189 6 }
9190 else
9191 {
9192 139 tempitem.flags |= ITEM_FLAG3;
9193
2/2
✓ Branch 0 taken 83 times.
✓ Branch 1 taken 56 times.
139 if(get_bit(quest_rules,qr_ITEMBUBBLE))tempitem.flags |= ITEM_FLAG4;
9194 56 else tempitem.flags &= ~ITEM_FLAG4;
9195 }
9196 145 }
9197
2/2
✓ Branch 0 taken 18052 times.
✓ Branch 1 taken 146 times.
18198 else if(tempitem.family == itype_triforcepiece)
9198 {
9199
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 140 times.
146 if(get_bit(quest_rules,qr_NONBUBBLETRIFORCE))
9200 {
9201 6 tempitem.flags |= ITEM_FLAG3;
9202
1/2
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
6 if(get_bit(quest_rules,qr_ITEMBUBBLE))tempitem.flags |= ITEM_FLAG4;
9203 else tempitem.flags &= ~ITEM_FLAG4;
9204 6 }
9205 else
9206 {
9207 140 tempitem.flags &= ~(ITEM_FLAG3|ITEM_FLAG4);
9208 }
9209 146 }
9210 18688 }
9211
9212
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if( s_version < 40)
9213 {
9214
4/4
✓ Branch 0 taken 18469 times.
✓ Branch 1 taken 219 times.
✓ Branch 2 taken 73 times.
✓ Branch 3 taken 18396 times.
18688 if(tempitem.family == itype_ring || tempitem.family == itype_perilring)
9215 {
9216
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 276 times.
292 if(get_bit(quest_rules,qr_RINGAFFECTDAMAGE))tempitem.flags |= ITEM_FLAG1;
9217 276 else tempitem.flags &= ~ITEM_FLAG1;
9218 292 }
9219
8/8
✓ Branch 0 taken 18212 times.
✓ Branch 1 taken 184 times.
✓ Branch 2 taken 12173 times.
✓ Branch 3 taken 6039 times.
✓ Branch 4 taken 12085 times.
✓ Branch 5 taken 88 times.
✓ Branch 6 taken 73 times.
✓ Branch 7 taken 12012 times.
18396 else if(tempitem.family == itype_candle || tempitem.family == itype_sword || tempitem.family == itype_wand || tempitem.family == itype_cbyrna)
9220 {
9221
2/2
✓ Branch 0 taken 81 times.
✓ Branch 1 taken 6303 times.
6384 if(get_bit(quest_rules,qr_SLASHFLIPFIX))tempitem.flags |= ITEM_FLAG8;
9222 6303 else tempitem.flags &= ~ITEM_FLAG8;
9223 6384 }
9224
6/6
✓ Branch 0 taken 12649 times.
✓ Branch 1 taken 6039 times.
✓ Branch 2 taken 12561 times.
✓ Branch 3 taken 88 times.
✓ Branch 4 taken 73 times.
✓ Branch 5 taken 12488 times.
18688 if(tempitem.family == itype_sword || tempitem.family == itype_wand || tempitem.family == itype_hammer)
9225 {
9226
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 6200 times.
6200 if(get_bit(quest_rules,qr_NOITEMMELEE))tempitem.flags |= ITEM_FLAG7;
9227 6200 else tempitem.flags &= ~ITEM_FLAG7;
9228 6200 }
9229
2/2
✓ Branch 0 taken 12415 times.
✓ Branch 1 taken 73 times.
12488 else if(tempitem.family == itype_cbyrna)
9230 {
9231 73 tempitem.flags |= ITEM_FLAG7;
9232 73 }
9233 18688 }
9234
9235
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if( s_version < 41 )
9236 {
9237
2/2
✓ Branch 0 taken 12649 times.
✓ Branch 1 taken 6039 times.
18688 if(tempitem.family == itype_sword)
9238 {
9239
2/2
✓ Branch 0 taken 69 times.
✓ Branch 1 taken 5970 times.
6039 if(get_bit(quest_rules,qr_SWORDMIRROR))tempitem.flags |= ITEM_FLAG9;
9240 5970 else tempitem.flags &= ~ITEM_FLAG9;
9241
9242
2/2
✓ Branch 0 taken 69 times.
✓ Branch 1 taken 5970 times.
6039 if(get_bit(quest_rules,qr_SLOWCHARGINGWALK))tempitem.flags |= ITEM_FLAG10;
9243 5970 else tempitem.flags &= ~ITEM_FLAG10;
9244 6039 }
9245 18688 }
9246
9247
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if( s_version < 42 )
9248 {
9249
2/2
✓ Branch 0 taken 88 times.
✓ Branch 1 taken 18600 times.
18688 if(tempitem.family == itype_wand)
9250 {
9251
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 87 times.
88 if(get_bit(quest_rules,qr_NOWANDMELEE))tempitem.flags |= ITEM_FLAG3;
9252 87 else tempitem.flags &= ~ITEM_FLAG3;
9253
9254 88 tempitem.flags &= ~ITEM_FLAG6;
9255 88 }
9256
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 18527 times.
18600 else if(tempitem.family == itype_hammer)
9257 {
9258 73 tempitem.flags &= ~ITEM_FLAG3;
9259 73 }
9260
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 18454 times.
18527 else if(tempitem.family == itype_cbyrna)
9261 {
9262 73 tempitem.flags |= ITEM_FLAG3;
9263
9264 73 tempitem.flags &= ~ITEM_FLAG6;
9265 73 }
9266
2/2
✓ Branch 0 taken 12415 times.
✓ Branch 1 taken 6039 times.
18454 else if(tempitem.family == itype_sword)
9267 {
9268
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 6039 times.
6039 if(get_bit(quest_rules,qr_MELEEMAGICCOST))tempitem.flags |= ITEM_FLAG6;
9269 6039 else tempitem.flags &= ~ITEM_FLAG6;
9270 6039 }
9271 18688 }
9272
9273
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if( s_version < 43 )
9274 {
9275
2/2
✓ Branch 0 taken 18569 times.
✓ Branch 1 taken 119 times.
18688 if(tempitem.family == itype_whistle)
9276 {
9277
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 116 times.
119 if(get_bit(quest_rules,qr_WHIRLWINDMIRROR))tempitem.flags |= ITEM_FLAG3;
9278 116 else tempitem.flags &= ~ITEM_FLAG3;
9279 119 }
9280 18688 }
9281
9282
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if( s_version < 45 )
9283 {
9284
2/2
✓ Branch 0 taken 18615 times.
✓ Branch 1 taken 73 times.
18688 if(tempitem.family == itype_flippers)
9285 {
9286 73 tempitem.misc1 = 50; //Dive length, default 50 frames -V
9287 73 tempitem.misc2 = 30; //Dive cooldown, default 30 frames -V
9288 73 }
9289 18688 }
9290
9291
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if( s_version < 46 )
9292 {
9293
2/2
✓ Branch 0 taken 18615 times.
✓ Branch 1 taken 73 times.
18688 if(tempitem.family == itype_raft)
9294 {
9295 73 tempitem.misc1 = 1; //Rafting speed modifier; default 1. Negative slows, positive speeds.
9296 73 }
9297 18688 }
9298
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if ( s_version < 34 ) //! set the default counter for older quests.
9299 {
9300
2/2
✓ Branch 0 taken 69 times.
✓ Branch 1 taken 18619 times.
18688 if ( (tempitem.flags & ITEM_RUPEE_MAGIC) )
9301 {
9302 69 tempitem.cost_counter[0] = 1;
9303 69 }
9304 else
9305 {
9306
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 17595 times.
18619 if(get_bit(quest_rules,qr_ENABLEMAGIC))
9307 1024 tempitem.cost_counter[0] = 4;
9308 else
9309 {
9310 17595 tempitem.cost_amount[0] = 0;
9311 17595 tempitem.cost_counter[0] = -1;
9312 }
9313 }
9314 18688 }
9315
9316
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if ( s_version < 35 ) //new Lens of Truth flags
9317 {
9318
2/2
✓ Branch 0 taken 18615 times.
✓ Branch 1 taken 73 times.
18688 if ( tempitem.family == itype_lens )
9319 {
9320
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 70 times.
73 if ( get_bit(quest_rules,qr_RAFTLENS) )
9321 {
9322 3 tempitem.flags |= ITEM_FLAG4;
9323 3 }
9324
2/2
✓ Branch 0 taken 36 times.
✓ Branch 1 taken 37 times.
73 if ( get_bit(quest_rules,qr_LENSHINTS) )
9325 {
9326 36 tempitem.flags |= ITEM_FLAG1;
9327 36 }
9328
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 69 times.
73 if ( get_bit(quest_rules,qr_LENSSEESENEMIES) )
9329 {
9330 4 tempitem.flags |= ITEM_FLAG5;
9331 4 }
9332 73 }
9333 18688 }
9334
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if ( s_version < 44 ) //InitD Labels and Sprite Script Data
9335 {
9336
2/2
✓ Branch 0 taken 149504 times.
✓ Branch 1 taken 18688 times.
168192 for ( int32_t q = 0; q < 8; q++ )
9337 {
9338 149504 sprintf(tempitem.initD_label[q],"InitD[%d]",q);
9339 149504 sprintf(tempitem.weapon_initD_label[q],"InitD[%d]",q);
9340 149504 sprintf(tempitem.sprite_initD_label[q],"InitD[%d]",q);
9341 149504 tempitem.sprite_initiald[q] = 0;
9342 149504 }
9343
2/2
✓ Branch 0 taken 37376 times.
✓ Branch 1 taken 18688 times.
56064 for ( int32_t q = 0; q < 2; q++ ) tempitem.sprite_initiala[q] = 0;
9344 18688 tempitem.sprite_script = 0;
9345 18688 }
9346
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if ( s_version < 47 ) //InitD Labels and Sprite Script Data
9347 {
9348 18688 tempitem.pickupflag = 0;
9349 18688 }
9350
9351
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if( s_version < 51 )
9352 {
9353
2/2
✓ Branch 0 taken 18504 times.
✓ Branch 1 taken 184 times.
18688 if( tempitem.family == itype_candle )
9354 {
9355 184 tempitem.misc4 = 50; //Step speed
9356 184 }
9357 18688 }
9358
9359
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if( s_version < 52 )
9360 {
9361
2/2
✓ Branch 0 taken 18469 times.
✓ Branch 1 taken 219 times.
18688 if( tempitem.family == itype_shield )
9362 219 tempitem.flags |= ITEM_FLAG1; //'Block Front' flag
9363 18688 }
9364
9365
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
23808 if(tempitem.fam_type==0) // Always do this
9366 tempitem.fam_type=1;
9367
9368 23808 memcpy(&itemsbuf[i], &tempitem, sizeof(itemdata));
9369 23808 }
9370 93 }
9371
9372 93 return 0;
9373 93 }
9374
9375 static bool did_init_def_items = false;
9376 47616 void init_def_items()
9377 {
9378
2/2
✓ Branch 0 taken 47590 times.
✓ Branch 1 taken 26 times.
47616 if(did_init_def_items) return;
9379 26 did_init_def_items = true;
9380 26 default_items[3].cost_counter[1] = crBOMBS;
9381 26 default_items[13].cost_counter[1] = crARROWS;
9382 26 default_items[14].cost_counter[1] = crARROWS;
9383 26 default_items[48].cost_counter[1] = crBOMBS;
9384 26 default_items[57].cost_counter[1] = crARROWS;
9385 47616 }
9386 47616 void reset_itembuf(itemdata *item, int32_t id)
9387 {
9388 47616 init_def_items();
9389
2/2
✓ Branch 0 taken 21018 times.
✓ Branch 1 taken 26598 times.
47616 if(id<iLast)
9390 {
9391 // Copy everything *EXCEPT* the tile, misc, cset, frames, speed, delay and ltm.
9392 26598 word tile = item->tile;
9393 26598 byte miscs = item->misc_flags, cset = item->csets, frames = item->frames, speed = item->speed, delay = item->delay;
9394 26598 int32_t ltm = item->ltm;
9395
9396 26598 memcpy(item,&default_items[id],sizeof(itemdata));
9397 26598 item->tile = tile;
9398 26598 item->misc_flags = miscs;
9399 26598 item->csets = cset;
9400 26598 item->frames = frames;
9401 26598 item->speed = speed;
9402 26598 item->delay = delay;
9403 26598 item->ltm = ltm;
9404 26598 }
9405 47616 }
9406
9407 6656 void reset_itemname(int32_t id)
9408 {
9409 6656 sprintf(item_string[id],"zz%03d",id);
9410
9411
2/2
✓ Branch 0 taken 2938 times.
✓ Branch 1 taken 3718 times.
6656 if(id < iLast)
9412 3718 strcpy(item_string[id],old_item_string[id]);
9413 6656 }
9414
9415 93 int32_t readweapons(PACKFILE *f, zquestheader *Header, bool keepdata)
9416 {
9417 93 word weapons_to_read=MAXWPNS;
9418 int32_t dummy;
9419 byte padding;
9420 wpndata tempweapon;
9421 93 word s_version=0, s_cversion=0;
9422
9423
9424
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(Header->zelda_version < 0x186)
9425 {
9426 weapons_to_read=64;
9427 }
9428
9429
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(Header->zelda_version < 0x185)
9430 {
9431 weapons_to_read=32;
9432 }
9433
9434
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(Header->zelda_version > 0x192)
9435 {
9436 93 weapons_to_read=0;
9437
9438 //section version info
9439
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_version,f,true))
9440 {
9441 return qe_invalid;
9442 }
9443
9444 93 FFCore.quest_format[vWeaponSprites] = s_version;
9445
9446 //al_trace("Weapons version %d\n", s_version);
9447
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_cversion,f,true))
9448 {
9449 return qe_invalid;
9450 }
9451
9452 //section size
9453
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&dummy,f,true))
9454 {
9455 return qe_invalid;
9456 }
9457
9458 //finally... section data
9459
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&weapons_to_read,f,true))
9460 {
9461 return qe_invalid;
9462 }
9463 93 }
9464
9465
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version>2)
9466 {
9467
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<weapons_to_read; i++)
9468 {
9469 char tempname[64];
9470
9471
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!pfread(tempname, 64, f, keepdata))
9472 {
9473 return qe_invalid;
9474 }
9475
9476
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
23808 if(keepdata)
9477 {
9478 23808 strcpy(weapon_string[i], tempname);
9479 23808 }
9480 23808 }
9481
9482
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version<4)
9483 {
9484 if(keepdata)
9485 {
9486 strcpy(weapon_string[iwHover],old_weapon_string[iwHover]);
9487 strcpy(weapon_string[wFIREMAGIC],old_weapon_string[wFIREMAGIC]);
9488 }
9489 }
9490
9491
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version<5)
9492 {
9493 if(keepdata)
9494 {
9495 strcpy(weapon_string[iwQuarterHearts],old_weapon_string[iwQuarterHearts]);
9496 }
9497 }
9498
9499 /*
9500 if (s_version<6)
9501 {
9502 strcpy(weapon_string[iwSideRaft],old_weapon_string[iwSideRaft]);
9503 strcpy(weapon_string[iwSideLadder],old_weapon_string[iwSideLadder]);
9504 }
9505 */
9506 93 }
9507 else
9508 {
9509 if(keepdata)
9510 for(int32_t i=0; i<WPNCNT; i++)
9511 reset_weaponname(i);
9512 }
9513
9514
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<weapons_to_read; i++)
9515 {
9516 23808 word oldtile = 0;
9517
2/2
✓ Branch 0 taken 3584 times.
✓ Branch 1 taken 20224 times.
23808 if (s_version < 8)
9518 {
9519
1/2
✓ Branch 0 taken 20224 times.
✗ Branch 1 not taken.
20224 if (!p_igetw(&oldtile, f, true))
9520 return qe_invalid;
9521 20224 }
9522
9523
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempweapon.misc,f,true))
9524 {
9525 return qe_invalid;
9526 }
9527
9528
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempweapon.csets,f,true))
9529 {
9530 return qe_invalid;
9531 }
9532
9533
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempweapon.frames,f,true))
9534 {
9535 return qe_invalid;
9536 }
9537
9538
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempweapon.speed,f,true))
9539 {
9540 return qe_invalid;
9541 }
9542
9543
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(!p_getc(&tempweapon.type,f,true))
9544 {
9545 return qe_invalid;
9546 }
9547
9548
2/2
✓ Branch 0 taken 18688 times.
✓ Branch 1 taken 5120 times.
23808 if ( s_version >= 7 )
9549 {
9550
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetw(&tempweapon.script,f,true))
9551 {
9552 return qe_invalid;
9553 }
9554
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(!p_igetl(&tempweapon.tile,f,true))
9555 {
9556 return qe_invalid;
9557 }
9558 5120 }
9559
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 18688 times.
23808 if ( s_version < 7 )
9560 {
9561 18688 tempweapon.tile = oldtile;
9562 18688 }
9563
9564
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(Header->zelda_version < 0x193)
9565 {
9566 if(!p_getc(&padding,f,true))
9567 {
9568 return qe_invalid;
9569 }
9570 }
9571
9572
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(s_version < 6)
9573 {
9574 if(i==ewFIRETRAIL)
9575 {
9576 tempweapon.misc |= WF_BEHIND;
9577 }
9578 else
9579 tempweapon.misc &= ~WF_BEHIND;
9580 }
9581
9582
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
23808 if(keepdata==true)
9583 {
9584 23808 memcpy(&wpnsbuf[i], &tempweapon, sizeof(tempweapon));
9585 23808 }
9586 23808 }
9587
9588
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata==true)
9589 {
9590
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version<2)
9591 {
9592 wpnsbuf[wSBOOM]=wpnsbuf[wBOOM];
9593 }
9594
9595
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version<5)
9596 {
9597 wpnsbuf[iwQuarterHearts].tile=1;
9598 wpnsbuf[iwQuarterHearts].csets=1;
9599 }
9600
9601
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(Header->zelda_version < 0x176)
9602 {
9603 wpnsbuf[iwSpawn] = *((wpndata*)(itemsbuf + iMisc1));
9604 wpnsbuf[iwDeath] = *((wpndata*)(itemsbuf + iMisc2));
9605 memset(&itemsbuf[iMisc1],0,sizeof(itemdata));
9606 memset(&itemsbuf[iMisc2],0,sizeof(itemdata));
9607 }
9608
9609
1/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
93 if((Header->zelda_version < 0x192)||
9610
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ((Header->zelda_version == 0x192)&&(Header->build<129)))
9611 {
9612 wpnsbuf[wHSCHAIN_V] = wpnsbuf[wHSCHAIN_H];
9613 }
9614
9615
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if((Header->zelda_version < 0x210))
9616 {
9617 wpnsbuf[wLSHEAD] = wpnsbuf[wHSHEAD];
9618 wpnsbuf[wLSCHAIN_H] = wpnsbuf[wHSCHAIN_H];
9619 wpnsbuf[wLSHANDLE] = wpnsbuf[wHSHANDLE];
9620 wpnsbuf[wLSCHAIN_V] = wpnsbuf[wHSCHAIN_V];
9621 }
9622 93 }
9623
9624 93 return 0;
9625 93 }
9626
9627 93 void init_guys(int32_t guyversion)
9628 {
9629
2/2
✓ Branch 0 taken 47616 times.
✓ Branch 1 taken 93 times.
47709 for(int32_t i=0; i<MAXGUYS; i++)
9630 {
9631 47616 guysbuf[i] = default_guys[0];
9632 47616 }
9633
9634
2/2
✓ Branch 0 taken 16461 times.
✓ Branch 1 taken 93 times.
16554 for(int32_t i=0; i<OLDMAXGUYS; i++)
9635 {
9636 16461 guysbuf[i] = default_guys[i];
9637
2/2
✓ Branch 0 taken 16275 times.
✓ Branch 1 taken 186 times.
16461 guysbuf[i].spr_shadow = (guysbuf[i].family==eeROCK && guysbuf[i].misc10==1) ? iwLargeShadow : iwShadow;
9638 16461 guysbuf[i].spr_death = iwDeath;
9639 16461 guysbuf[i].spr_spawn = iwSpawn;
9640 // Patra fix: 2.10 BSPatras used spDIG. 2.50 Patras use CSet 7.
9641
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 16461 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
16461 if(guyversion<=3 && i==ePATRABS)
9642 {
9643 guysbuf[i].bosspal=spDIG;
9644 guysbuf[i].cset=14;
9645 guysbuf[i].misc9=14;
9646 }
9647
9648
1/2
✓ Branch 0 taken 16461 times.
✗ Branch 1 not taken.
16461 if(guyversion<=3)
9649 {
9650 // Rope/Ghini Flash rules
9651 if(get_bit(deprecated_rules, qr_NOROPE2FLASH_DEP))
9652 {
9653 if(i==eROPE2)
9654 {
9655 guysbuf[i].flags2 &= ~guy_flashing;
9656 }
9657 }
9658
9659 if(get_bit(deprecated_rules, qr_NOBUBBLEFLASH_DEP))
9660 {
9661 if(i==eBUBBLEST || i==eBUBBLESP || i==eBUBBLESR || i==eBUBBLEIT || i==eBUBBLEIP || i==eBUBBLEIR)
9662 {
9663 guysbuf[i].flags2 &= ~guy_flashing;
9664 }
9665 }
9666
9667 if(i==eGHINI2)
9668 {
9669 if(get_bit(deprecated_rules, qr_GHINI2BLINK_DEP))
9670 {
9671 guysbuf[i].flags2 |= guy_blinking;
9672 }
9673
9674 if(get_bit(deprecated_rules, qr_PHANTOMGHINI2_DEP))
9675 {
9676 guysbuf[i].flags2 |= guy_transparent;
9677 }
9678 }
9679 }
9680
9681 // Darknut fix
9682
10/10
✓ Branch 0 taken 16368 times.
✓ Branch 1 taken 93 times.
✓ Branch 2 taken 16275 times.
✓ Branch 3 taken 93 times.
✓ Branch 4 taken 16182 times.
✓ Branch 5 taken 93 times.
✓ Branch 6 taken 16089 times.
✓ Branch 7 taken 93 times.
✓ Branch 8 taken 93 times.
✓ Branch 9 taken 15996 times.
16461 if(i==eDKNUT1 || i==eDKNUT2 || i==eDKNUT3 || i==eDKNUT4 || i==eDKNUT5)
9683 {
9684
2/2
✓ Branch 0 taken 285 times.
✓ Branch 1 taken 180 times.
465 if(get_bit(quest_rules,qr_NEWENEMYTILES))
9685 {
9686 285 guysbuf[i].s_tile=guysbuf[i].e_tile+120;
9687 285 guysbuf[i].s_width=guysbuf[i].e_width;
9688 285 guysbuf[i].s_height=guysbuf[i].e_height;
9689 285 }
9690 180 else guysbuf[i].s_tile=860;
9691
9692
1/2
✓ Branch 0 taken 465 times.
✗ Branch 1 not taken.
465 if(get_bit(deprecated_rules,qr_BRKBLSHLDS_DEP))
9693 {
9694 guysbuf[i].flags |= guy_bkshield;
9695 }
9696 465 }
9697
9698
3/4
✓ Branch 0 taken 16368 times.
✓ Branch 1 taken 93 times.
✓ Branch 2 taken 16461 times.
✗ Branch 3 not taken.
16461 if((i==eGELTRIB || i==eFGELTRIB) && get_bit(deprecated_rules,qr_OLDTRIBBLES_DEP))
9699 {
9700 guysbuf[i].misc3 = (i==eFGELTRIB ? eFZOL : eZOL);
9701 }
9702 16461 }
9703 93 }
9704
9705 void reset_weaponname(int32_t i)
9706 {
9707 if(i<wLast)
9708 {
9709 strcpy(weapon_string[i],old_weapon_string[i]);
9710 }
9711 else
9712 sprintf(weapon_string[i],"zz%03d",i);
9713 }
9714
9715 93 void init_item_drop_sets()
9716 {
9717
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<MAXITEMDROPSETS; i++)
9718 {
9719 // item_drop_sets[i] = default_item_drop_sets[0];
9720 23808 memset(&item_drop_sets[i], 0, sizeof(item_drop_object));
9721 23808 }
9722
9723
2/2
✓ Branch 0 taken 1209 times.
✓ Branch 1 taken 93 times.
1302 for(int32_t i=0; i<isMAX; i++)
9724 {
9725 1209 item_drop_sets[i] = default_item_drop_sets[i];
9726
9727 // Deprecated: qr_NOCLOCKS and qr_ALLOW10RUPEEDROPS
9728
2/2
✓ Branch 0 taken 12090 times.
✓ Branch 1 taken 1209 times.
13299 for(int32_t j=0; j<10; ++j)
9729 {
9730 12090 int32_t it = item_drop_sets[i].item[j];
9731
9732
3/4
✓ Branch 0 taken 8556 times.
✓ Branch 1 taken 3534 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 552 times.
12090 if((itemsbuf[it].family == itype_rupee && ((itemsbuf[it].amount)&0xFFF) == 10)
9733
2/2
✓ Branch 0 taken 552 times.
✓ Branch 1 taken 8004 times.
8556 && !get_bit(deprecated_rules, qr_ALLOW10RUPEEDROPS_DEP))
9734 {
9735 552 item_drop_sets[i].chance[j+1]=0;
9736 552 }
9737
3/4
✓ Branch 0 taken 372 times.
✓ Branch 1 taken 11166 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 372 times.
11538 else if(itemsbuf[it].family == itype_clock && get_bit(deprecated_rules, qr_NOCLOCKS_DEP))
9738 {
9739 item_drop_sets[i].chance[j+1]=0;
9740 }
9741
9742 // From Sept 2007 to Dec 2008, non-gameplay items were prohibited.
9743
2/2
✓ Branch 0 taken 12082 times.
✓ Branch 1 taken 8 times.
12090 if(itemsbuf[it].family == itype_misc)
9744 {
9745 // If a non-gameplay item was selected, then item drop was aborted.
9746 // Reflect this by increasing the 'Nothing' chance accordingly.
9747 8 item_drop_sets[i].chance[0]+=item_drop_sets[i].chance[j+1];
9748 8 item_drop_sets[i].chance[j+1]=0;
9749 8 }
9750 12090 }
9751 1209 }
9752 93 }
9753
9754 93 void init_favorites()
9755 {
9756
2/2
✓ Branch 0 taken 9300 times.
✓ Branch 1 taken 93 times.
9393 for(int32_t i=0; i<MAXFAVORITECOMBOS; i++)
9757 {
9758 9300 favorite_combos[i]=-1;
9759 9300 }
9760
9761
2/2
✓ Branch 0 taken 9300 times.
✓ Branch 1 taken 93 times.
9393 for(int32_t i=0; i<MAXFAVORITECOMBOALIASES; i++)
9762 {
9763 9300 favorite_comboaliases[i]=-1;
9764 9300 }
9765 93 }
9766
9767 const char *ctype_name[cMAX]=
9768 {
9769 "cNONE", "cSTAIR", "cCAVE", "cWATER", "cARMOS", "cGRAVE", "cDOCK",
9770 "cUNDEF", "cPUSH_WAIT", "cPUSH_HEAVY", "cPUSH_HW", "cL_STATUE", "cR_STATUE",
9771 "cWALKSLOW", "cCVUP", "cCVDOWN", "cCVLEFT", "cCVRIGHT", "cSWIMWARP", "cDIVEWARP",
9772 "cLADDERHOOKSHOT", "cTRIGNOFLAG", "cTRIGFLAG", "cZELDA", "cSLASH", "cSLASHITEM",
9773 "cPUSH_HEAVY2", "cPUSH_HW2", "cPOUND", "cHSGRAB", "cHSBRIDGE", "cDAMAGE1",
9774 "cDAMAGE2", "cDAMAGE3", "cDAMAGE4", "cC_STATUE", "cTRAP_H", "cTRAP_V", "cTRAP_4",
9775 "cTRAP_LR", "cTRAP_UD", "cPIT", "cHOOKSHOTONLY", "cOVERHEAD", "cNOFLYZONE", "cMIRROR",
9776 "cMIRRORSLASH", "cMIRRORBACKSLASH", "cMAGICPRISM", "cMAGICPRISM4",
9777 "cMAGICSPONGE", "cCAVE2", "cEYEBALL_A", "cEYEBALL_B", "cNOJUMPZONE", "cBUSH",
9778 "cFLOWERS", "cTALLGRASS", "cSHALLOWWATER", "cLOCKBLOCK", "cLOCKBLOCK2",
9779 "cBOSSLOCKBLOCK", "cBOSSLOCKBLOCK2", "cLADDERONLY", "cBSGRAVE",
9780 "cCHEST", "cCHEST2", "cLOCKEDCHEST", "cLOCKEDCHEST2", "cBOSSCHEST", "cBOSSCHEST2",
9781 "cRESET", "cSAVE", "cSAVE2", "cCAVEB", "cCAVEC", "cCAVED",
9782 "cSTAIRB", "cSTAIRC", "cSTAIRD", "cPITB", "cPITC", "cPITD",
9783 "cCAVE2B", "cCAVE2C", "cCAVE2D", "cSWIMWARPB", "cSWIMWARPC", "cSWIMWARPD",
9784 "cDIVEWARPB", "cDIVEWARPC", "cDIVEWARPD", "cSTAIRR", "cPITR",
9785 "cAWARPA", "cAWARPB", "cAWARPC", "cAWARPD", "cAWARPR",
9786 "cSWARPA", "cSWARPB", "cSWARPC", "cSWARPD", "cSWARPR", "cSTRIGNOFLAG", "cSTRIGFLAG",
9787 "cSTEP", "cSTEPSAME", "cSTEPALL", "cSTEPCOPY", "cNOENEMY", "cBLOCKARROW1", "cBLOCKARROW2",
9788 "cBLOCKARROW3", "cBLOCKBRANG1", "cBLOCKBRANG2", "cBLOCKBRANG3", "cBLOCKSBEAM", "cBLOCKALL",
9789 "cBLOCKFIREBALL", "cDAMAGE5", "cDAMAGE6", "cDAMAGE7", "cCHANGE", "cSPINTILE1", "cSPINTILE2",
9790 "cSCREENFREEZE", "cSCREENFREEZEFF", "cNOGROUNDENEMY", "cSLASHNEXT", "cSLASHNEXTITEM", "cBUSHNEXT"
9791 "cSLASHTOUCHY", "cSLASHITEMTOUCHY", "cBUSHTOUCHY", "cFLOWERSTOUCHY", "cTALLGRASSTOUCHY",
9792 "cSLASHNEXTTOUCHY", "cSLASHNEXTITEMTOUCHY", "cBUSHNEXTTOUCHY", "cEYEBALL_4", "cTALLGRASSNEXT",
9793 "cSCRIPT1", "cSCRIPT2", "cSCRIPT3", "cSCRIPT4", "cSCRIPT5",
9794 "cSCRIPT6", "cSCRIPT7", "cSCRIPT8", "cSCRIPT9", "cSCRIPT10",
9795 "cSCRIPT11", "cSCRIPT12", "cSCRIPT13", "cSCRIPT14", "cSCRIPT15",
9796 "cSCRIPT16", "cSCRIPT17", "cSCRIPT18", "cSCRIPT19", "cSCRIPT20"
9797
9798 };
9799
9800 168 int32_t init_combo_classes()
9801 {
9802
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 168 times.
168 zinfo* zi = (load_tmp_zi ? load_tmp_zi : &ZI);
9803
2/2
✓ Branch 0 taken 29904 times.
✓ Branch 1 taken 168 times.
30072 for(int32_t i=0; i<cMAX; i++)
9804 {
9805 29904 combo_class_buf[i] = default_combo_classes[i];
9806
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 29904 times.
29904 if ( char const* nm = zi->getComboTypeName(i) )
9807 {
9808 29904 size_t len = strlen(nm);
9809
2/2
✓ Branch 0 taken 1913856 times.
✓ Branch 1 taken 29904 times.
1943760 for ( size_t q = 0; q < 64; q++ )
9810 {
9811
2/2
✓ Branch 0 taken 443184 times.
✓ Branch 1 taken 1470672 times.
1913856 combo_class_buf[i].name[q] = (q<len ? nm[q] : 0);
9812 1913856 }
9813 29904 }
9814 29904 }
9815
9816 168 return 0;
9817 }
9818
9819 73 int32_t readherosprites2(PACKFILE *f, int32_t v_herosprites, int32_t cv_herosprites, bool keepdata)
9820 {
9821
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 assert(v_herosprites < 6);
9822 //these are here to bypass compiler warnings about unused arguments
9823 73 cv_herosprites=cv_herosprites;
9824
9825
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(keepdata)
9826 {
9827 73 zinit.hero_swim_speed=67; //default
9828 73 setupherotiles(zinit.heroAnimationStyle);
9829 73 setupherodefenses();
9830 73 setupherooffsets();
9831 73 }
9832
9833
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(v_herosprites>=0)
9834 {
9835 word tile, tile2;
9836 byte flip, extend, dummy_byte;
9837
9838
2/2
✓ Branch 0 taken 292 times.
✓ Branch 1 taken 73 times.
365 for(int32_t i=0; i<4; i++)
9839 {
9840
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_igetw(&tile,f,keepdata))
9841 {
9842 return qe_invalid;
9843 }
9844
9845
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&flip,f,keepdata))
9846 {
9847 return qe_invalid;
9848 }
9849
9850
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&extend,f,keepdata))
9851 {
9852 return qe_invalid;
9853 }
9854
9855
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 292 times.
292 if(keepdata)
9856 {
9857 292 walkspr[i][spr_tile]=(int32_t)tile;
9858 292 walkspr[i][spr_flip]=(int32_t)flip;
9859 292 walkspr[i][spr_extend]=(int32_t)extend;
9860 292 }
9861 292 }
9862
9863
2/2
✓ Branch 0 taken 292 times.
✓ Branch 1 taken 73 times.
365 for(int32_t i=0; i<4; i++)
9864 {
9865
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_igetw(&tile,f,keepdata))
9866 {
9867 return qe_invalid;
9868 }
9869
9870
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&flip,f,keepdata))
9871 {
9872 return qe_invalid;
9873 }
9874
9875
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&extend,f,keepdata))
9876 {
9877 return qe_invalid;
9878 }
9879
9880
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 292 times.
292 if(keepdata)
9881 {
9882 292 stabspr[i][spr_tile]=(int32_t)tile;
9883 292 stabspr[i][spr_flip]=(int32_t)flip;
9884 292 stabspr[i][spr_extend]=(int32_t)extend;
9885 292 }
9886 292 }
9887
9888
2/2
✓ Branch 0 taken 292 times.
✓ Branch 1 taken 73 times.
365 for(int32_t i=0; i<4; i++)
9889 {
9890
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_igetw(&tile,f,keepdata))
9891 {
9892 return qe_invalid;
9893 }
9894
9895
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&flip,f,keepdata))
9896 {
9897 return qe_invalid;
9898 }
9899
9900
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&extend,f,keepdata))
9901 {
9902 return qe_invalid;
9903 }
9904
9905
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 292 times.
292 if(keepdata)
9906 {
9907 292 slashspr[i][spr_tile]=(int32_t)tile;
9908 292 slashspr[i][spr_flip]=(int32_t)flip;
9909 292 slashspr[i][spr_extend]=(int32_t)extend;
9910 292 }
9911 292 }
9912
9913
2/2
✓ Branch 0 taken 292 times.
✓ Branch 1 taken 73 times.
365 for(int32_t i=0; i<4; i++)
9914 {
9915
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_igetw(&tile,f,keepdata))
9916 {
9917 return qe_invalid;
9918 }
9919
9920
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&flip,f,keepdata))
9921 {
9922 return qe_invalid;
9923 }
9924
9925
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&extend,f,keepdata))
9926 {
9927 return qe_invalid;
9928 }
9929
9930
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 292 times.
292 if(keepdata)
9931 {
9932 292 floatspr[i][spr_tile]=(int32_t)tile;
9933 292 floatspr[i][spr_flip]=(int32_t)flip;
9934 292 floatspr[i][spr_extend]=(int32_t)extend;
9935 292 }
9936 292 }
9937
9938
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(v_herosprites>1)
9939 {
9940
2/2
✓ Branch 0 taken 292 times.
✓ Branch 1 taken 73 times.
365 for(int32_t i=0; i<4; i++)
9941 {
9942
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_igetw(&tile,f,keepdata))
9943 {
9944 return qe_invalid;
9945 }
9946
9947
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&flip,f,keepdata))
9948 {
9949 return qe_invalid;
9950 }
9951
9952
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&extend,f,keepdata))
9953 {
9954 return qe_invalid;
9955 }
9956
9957
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 292 times.
292 if(keepdata)
9958 {
9959 292 swimspr[i][spr_tile]=(int32_t)tile;
9960 292 swimspr[i][spr_flip]=(int32_t)flip;
9961 292 swimspr[i][spr_extend]=(int32_t)extend;
9962 292 }
9963 292 }
9964 73 }
9965
9966
2/2
✓ Branch 0 taken 292 times.
✓ Branch 1 taken 73 times.
365 for(int32_t i=0; i<4; i++)
9967 {
9968
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_igetw(&tile,f,keepdata))
9969 {
9970 return qe_invalid;
9971 }
9972
9973
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&flip,f,keepdata))
9974 {
9975 return qe_invalid;
9976 }
9977
9978
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&extend,f,keepdata))
9979 {
9980 return qe_invalid;
9981 }
9982
9983
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 292 times.
292 if(keepdata)
9984 {
9985 292 divespr[i][spr_tile]=(int32_t)tile;
9986 292 divespr[i][spr_flip]=(int32_t)flip;
9987 292 divespr[i][spr_extend]=(int32_t)extend;
9988 292 }
9989 292 }
9990
9991
2/2
✓ Branch 0 taken 292 times.
✓ Branch 1 taken 73 times.
365 for(int32_t i=0; i<4; i++)
9992 {
9993
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_igetw(&tile,f,keepdata))
9994 {
9995 return qe_invalid;
9996 }
9997
9998
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&flip,f,keepdata))
9999 {
10000 return qe_invalid;
10001 }
10002
10003
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&extend,f,keepdata))
10004 {
10005 return qe_invalid;
10006 }
10007
10008
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 292 times.
292 if(keepdata)
10009 {
10010 292 poundspr[i][spr_tile]=(int32_t)tile;
10011 292 poundspr[i][spr_flip]=(int32_t)flip;
10012 292 poundspr[i][spr_extend]=(int32_t)extend;
10013 292 }
10014 292 }
10015
10016
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 if(!p_igetw(&tile,f,keepdata))
10017 {
10018 return qe_invalid;
10019 }
10020
10021 73 flip=0;
10022
10023
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(v_herosprites>0)
10024 {
10025
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 if(!p_getc(&flip,f,keepdata))
10026 {
10027 return qe_invalid;
10028 }
10029 73 }
10030
10031
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 if(!p_getc(&extend,f,keepdata))
10032 {
10033 return qe_invalid;
10034 }
10035
10036
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(keepdata)
10037 {
10038 73 castingspr[spr_tile]=(int32_t)tile;
10039 73 castingspr[spr_flip]=(int32_t)flip;
10040 73 castingspr[spr_extend]=(int32_t)extend;
10041 73 }
10042
10043
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 if(v_herosprites>0)
10044 {
10045 73 int32_t num_holdsprs = (v_herosprites > 6 ? 3 : 2);
10046
2/2
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 73 times.
219 for(int32_t i=0; i<2; i++)
10047 {
10048
2/2
✓ Branch 0 taken 292 times.
✓ Branch 1 taken 146 times.
438 for(int32_t j=0; j<num_holdsprs; j++)
10049 {
10050
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_igetw(&tile,f,keepdata))
10051 {
10052 return qe_invalid;
10053 }
10054
10055
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&flip,f,keepdata))
10056 {
10057 return qe_invalid;
10058 }
10059
10060
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&extend,f,keepdata))
10061 {
10062 return qe_invalid;
10063 }
10064
10065
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 292 times.
292 if(keepdata)
10066 {
10067 292 holdspr[i][j][spr_tile]=(int32_t)tile;
10068 292 holdspr[i][j][spr_flip]=(int32_t)flip;
10069 292 holdspr[i][j][spr_extend]=(int32_t)extend;
10070 292 }
10071 292 }
10072 146 }
10073 73 }
10074 else
10075 {
10076 for(int32_t i=0; i<2; i++)
10077 {
10078 if(!p_igetw(&tile,f,keepdata))
10079 {
10080 return qe_invalid;
10081 }
10082
10083 if(!p_igetw(&tile2,f,keepdata))
10084 {
10085 return qe_invalid;
10086 }
10087
10088 if(!p_getc(&extend,f,keepdata))
10089 {
10090 return qe_invalid;
10091 }
10092
10093 if(keepdata)
10094 {
10095 holdspr[i][spr_hold1][spr_tile]=(int32_t)tile;
10096 holdspr[i][spr_hold1][spr_flip]=(int32_t)flip;
10097 holdspr[i][spr_hold1][spr_extend]=(int32_t)extend;
10098 holdspr[i][spr_hold2][spr_tile]=(int32_t)tile2;
10099 holdspr[i][spr_hold2][spr_flip]=(int32_t)flip;
10100 holdspr[i][spr_hold2][spr_extend]=(int32_t)extend;
10101 }
10102 }
10103 }
10104
10105
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(v_herosprites>2)
10106 {
10107
2/2
✓ Branch 0 taken 292 times.
✓ Branch 1 taken 73 times.
365 for(int32_t i=0; i<4; i++)
10108 {
10109
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_igetw(&tile,f,keepdata))
10110 {
10111 return qe_invalid;
10112 }
10113
10114
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&flip,f,keepdata))
10115 {
10116 return qe_invalid;
10117 }
10118
10119
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&extend,f,keepdata))
10120 {
10121 return qe_invalid;
10122 }
10123
10124
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 292 times.
292 if(keepdata)
10125 {
10126 292 jumpspr[i][spr_tile]=(int32_t)tile;
10127 292 jumpspr[i][spr_flip]=(int32_t)flip;
10128 292 jumpspr[i][spr_extend]=(int32_t)extend;
10129 292 }
10130 292 }
10131 73 }
10132
10133
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(v_herosprites>3)
10134 {
10135
2/2
✓ Branch 0 taken 292 times.
✓ Branch 1 taken 73 times.
365 for(int32_t i=0; i<4; i++)
10136 {
10137
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_igetw(&tile,f,keepdata))
10138 {
10139 return qe_invalid;
10140 }
10141
10142
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&flip,f,keepdata))
10143 {
10144 return qe_invalid;
10145 }
10146
10147
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(!p_getc(&extend,f,keepdata))
10148 {
10149 return qe_invalid;
10150 }
10151
10152
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 292 times.
292 if(keepdata)
10153 {
10154 292 chargespr[i][spr_tile]=(int32_t)tile;
10155 292 chargespr[i][spr_flip]=(int32_t)flip;
10156 292 chargespr[i][spr_extend]=(int32_t)extend;
10157 292 }
10158 292 }
10159 73 }
10160
10161
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(v_herosprites>4)
10162 {
10163
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(!p_getc(&dummy_byte,f,keepdata))
10164 {
10165 return qe_invalid;
10166 }
10167
10168
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(keepdata)
10169 {
10170 73 zinit.hero_swim_speed=(byte)dummy_byte;
10171 73 }
10172 73 }
10173
10174
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 if(keepdata)
10175 {
10176 73 memset(frozenspr, 0, sizeof(frozenspr));
10177 73 memset(frozen_waterspr, 0, sizeof(frozen_waterspr));
10178 73 memset(onfirespr, 0, sizeof(onfirespr));
10179 73 memset(onfire_waterspr, 0, sizeof(onfire_waterspr));
10180 73 memset(diggingspr, 0, sizeof(diggingspr));
10181 73 memset(usingrodspr, 0, sizeof(usingrodspr));
10182 73 memset(usingcanespr, 0, sizeof(usingcanespr));
10183 73 memset(pushingspr, 0, sizeof(pushingspr));
10184 73 memset(liftingspr, 0, sizeof(liftingspr));
10185 73 memset(liftingwalkspr, 0, sizeof(liftingwalkspr));
10186 73 memset(stunnedspr, 0, sizeof(stunnedspr));
10187 73 memset(stunned_waterspr, 0, sizeof(stunned_waterspr));
10188 73 memset(fallingspr, 0, sizeof(fallingspr));
10189 73 memset(shockedspr, 0, sizeof(shockedspr));
10190 73 memset(shocked_waterspr, 0, sizeof(shocked_waterspr));
10191 73 memset(pullswordspr, 0, sizeof(pullswordspr));
10192 73 memset(readingspr, 0, sizeof(readingspr));
10193 73 memset(slash180spr, 0, sizeof(slash180spr));
10194 73 memset(slashZ4spr, 0, sizeof(slashZ4spr));
10195 73 memset(dashspr, 0, sizeof(dashspr));
10196 73 memset(bonkspr, 0, sizeof(bonkspr));
10197 73 memset(medallionsprs, 0, sizeof(medallionsprs));
10198 73 memset(holdspr[0][2], 0, sizeof(holdspr[0][2])); //Sword hold (Land)
10199 73 memset(holdspr[1][2], 0, sizeof(holdspr[1][2])); //Sword hold (Water)
10200
2/2
✓ Branch 0 taken 292 times.
✓ Branch 1 taken 73 times.
365 for(int32_t q = 0; q < 4; ++q)
10201 {
10202
2/2
✓ Branch 0 taken 876 times.
✓ Branch 1 taken 292 times.
1168 for(int32_t p = 0; p < 3; ++p)
10203 {
10204 876 drowningspr[q][p] = divespr[q][p];
10205 876 drowning_lavaspr[q][p] = divespr[q][p];
10206 876 }
10207 292 }
10208 73 memset(sideswimspr, 0, sizeof(sideswimspr));
10209 73 memset(sideswimslashspr, 0, sizeof(sideswimslashspr));
10210 73 memset(sideswimstabspr, 0, sizeof(sideswimstabspr));
10211 73 memset(sideswimpoundspr, 0, sizeof(sideswimpoundspr));
10212 73 memset(sideswimchargespr, 0, sizeof(sideswimchargespr));
10213 73 memset(sideswimholdspr, 0, sizeof(sideswimholdspr));
10214 73 memset(sidedrowningspr, 0, sizeof(sidedrowningspr));
10215 73 }
10216 73 }
10217
10218 73 return 0;
10219 73 }
10220
10221 3400 void setSprite(int32_t* arr, int32_t tile, int32_t flip, int32_t ext)
10222 {
10223 3400 arr[spr_tile] = tile;
10224
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3400 times.
3400 arr[spr_flip] = (flip > 3 ? 0 : flip);
10225
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3400 times.
3400 arr[spr_extend] = (ext > 2 ? 0 : ext);
10226 3400 }
10227 //Used to read the player sprites as int32_t, not word.
10228 20 int32_t readherosprites3(PACKFILE *f, int32_t v_herosprites, int32_t cv_herosprites, bool keepdata)
10229 {
10230 //these are here to bypass compiler warnings about unused arguments
10231 20 cv_herosprites=cv_herosprites;
10232
10233
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
20 if(keepdata)
10234 {
10235 20 zinit.hero_swim_speed=67; //default
10236 20 setupherotiles(zinit.heroAnimationStyle);
10237 20 setupherodefenses();
10238 20 setupherooffsets();
10239 20 }
10240
10241 int32_t tile, tile2;
10242 byte flip, extend, dummy_byte;
10243
10244
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
20 if(v_herosprites>=0)
10245 {
10246
10247
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t i=0; i<4; i++)
10248 {
10249
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10250 {
10251 return qe_invalid;
10252 }
10253
10254
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
10255 {
10256 return qe_invalid;
10257 }
10258
10259
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10260 {
10261 return qe_invalid;
10262 }
10263
10264 80 if(keepdata)
10265 {
10266 80 setSprite(walkspr[i], int32_t(tile), int32_t(flip), int32_t(extend));
10267 80 }
10268 80 }
10269
10270
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t i=0; i<4; i++)
10271 {
10272
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10273 {
10274 return qe_invalid;
10275 }
10276
10277
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
10278 {
10279 return qe_invalid;
10280 }
10281
10282
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10283 {
10284 return qe_invalid;
10285 }
10286
10287
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10288 {
10289 80 setSprite(stabspr[i], int32_t(tile), int32_t(flip), int32_t(extend));
10290 80 }
10291 80 }
10292
10293
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t i=0; i<4; i++)
10294 {
10295
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10296 {
10297 return qe_invalid;
10298 }
10299
10300
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
10301 {
10302 return qe_invalid;
10303 }
10304
10305
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10306 {
10307 return qe_invalid;
10308 }
10309
10310
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10311 {
10312 80 setSprite(slashspr[i], int32_t(tile), int32_t(flip), int32_t(extend));
10313 80 }
10314 80 }
10315
10316
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t i=0; i<4; i++)
10317 {
10318
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10319 {
10320 return qe_invalid;
10321 }
10322
10323
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
10324 {
10325 return qe_invalid;
10326 }
10327
10328
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10329 {
10330 return qe_invalid;
10331 }
10332
10333
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10334 {
10335 80 setSprite(floatspr[i], int32_t(tile), int32_t(flip), int32_t(extend));
10336 80 }
10337 80 }
10338
10339
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
20 if(v_herosprites>1)
10340 {
10341
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t i=0; i<4; i++)
10342 {
10343
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10344 {
10345 return qe_invalid;
10346 }
10347
10348
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
10349 {
10350 return qe_invalid;
10351 }
10352
10353
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10354 {
10355 return qe_invalid;
10356 }
10357
10358
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10359 {
10360 80 setSprite(swimspr[i], int32_t(tile), int32_t(flip), int32_t(extend));
10361 80 }
10362 80 }
10363 20 }
10364
10365
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t i=0; i<4; i++)
10366 {
10367
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10368 {
10369 return qe_invalid;
10370 }
10371
10372
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
10373 {
10374 return qe_invalid;
10375 }
10376
10377
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10378 {
10379 return qe_invalid;
10380 }
10381
10382
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10383 {
10384 80 setSprite(divespr[i], int32_t(tile), int32_t(flip), int32_t(extend));
10385 80 }
10386 80 }
10387
10388
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t i=0; i<4; i++)
10389 {
10390
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10391 {
10392 return qe_invalid;
10393 }
10394
10395
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
10396 {
10397 return qe_invalid;
10398 }
10399
10400
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10401 {
10402 return qe_invalid;
10403 }
10404
10405
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10406 {
10407 80 setSprite(poundspr[i], int32_t(tile), int32_t(flip), int32_t(extend));
10408 80 }
10409 80 }
10410
10411
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(!p_igetl(&tile,f,keepdata))
10412 {
10413 return qe_invalid;
10414 }
10415
10416 20 flip=0;
10417
10418
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
20 if(v_herosprites>0)
10419 {
10420
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(!p_getc(&flip,f,keepdata))
10421 {
10422 return qe_invalid;
10423 }
10424 20 }
10425
10426
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(!p_getc(&extend,f,keepdata))
10427 {
10428 return qe_invalid;
10429 }
10430
10431
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
20 if(keepdata)
10432 {
10433 20 setSprite(castingspr, int32_t(tile), int32_t(flip), int32_t(extend));
10434 20 }
10435
10436
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(v_herosprites>0)
10437 {
10438 20 int32_t num_holdsprs = (v_herosprites > 6 ? 3 : 2);
10439
2/2
✓ Branch 0 taken 40 times.
✓ Branch 1 taken 20 times.
60 for(int32_t i=0; i<2; i++)
10440 {
10441
2/2
✓ Branch 0 taken 120 times.
✓ Branch 1 taken 40 times.
160 for(int32_t j=0; j<num_holdsprs; j++)
10442 {
10443
1/2
✓ Branch 0 taken 120 times.
✗ Branch 1 not taken.
120 if(!p_igetl(&tile,f,keepdata))
10444 {
10445 return qe_invalid;
10446 }
10447
10448
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 120 times.
120 if(!p_getc(&flip,f,keepdata))
10449 {
10450 return qe_invalid;
10451 }
10452
10453
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 120 times.
120 if(!p_getc(&extend,f,keepdata))
10454 {
10455 return qe_invalid;
10456 }
10457
10458
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 120 times.
120 if(keepdata)
10459 {
10460 120 setSprite(holdspr[i][j], int32_t(tile), int32_t(flip), int32_t(extend));
10461 120 }
10462 120 }
10463 40 }
10464 20 }
10465 else
10466 {
10467 for(int32_t i=0; i<2; i++)
10468 {
10469 if(!p_igetl(&tile,f,keepdata))
10470 {
10471 return qe_invalid;
10472 }
10473
10474 if(!p_igetl(&tile2,f,keepdata))
10475 {
10476 return qe_invalid;
10477 }
10478
10479 if(!p_getc(&extend,f,keepdata))
10480 {
10481 return qe_invalid;
10482 }
10483
10484 if(keepdata)
10485 {
10486 setSprite(holdspr[i][spr_hold1], int32_t(tile), int32_t(flip), int32_t(extend));
10487 setSprite(holdspr[i][spr_hold2], int32_t(tile2), int32_t(flip), int32_t(extend));
10488 }
10489 }
10490 }
10491
10492
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
20 if(v_herosprites>2)
10493 {
10494
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t i=0; i<4; i++)
10495 {
10496
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10497 {
10498 return qe_invalid;
10499 }
10500
10501
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
10502 {
10503 return qe_invalid;
10504 }
10505
10506
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10507 {
10508 return qe_invalid;
10509 }
10510
10511
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10512 {
10513 80 setSprite(jumpspr[i], int32_t(tile), int32_t(flip), int32_t(extend));
10514 80 }
10515 80 }
10516 20 }
10517
10518
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
20 if(v_herosprites>3)
10519 {
10520
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t i=0; i<4; i++)
10521 {
10522
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10523 {
10524 return qe_invalid;
10525 }
10526
10527
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
10528 {
10529 return qe_invalid;
10530 }
10531
10532
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10533 {
10534 return qe_invalid;
10535 }
10536
10537
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10538 {
10539 80 setSprite(chargespr[i], int32_t(tile), int32_t(flip), int32_t(extend));
10540 80 }
10541 80 }
10542 20 }
10543
10544
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
20 if(v_herosprites>4)
10545 {
10546
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(!p_getc(&dummy_byte,f,keepdata))
10547 {
10548 return qe_invalid;
10549 }
10550
10551
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
20 if(keepdata)
10552 {
10553 20 zinit.hero_swim_speed=(byte)dummy_byte;
10554 20 }
10555 20 }
10556
10557
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(v_herosprites>6)
10558 {
10559
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10560 {
10561
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10562 return qe_invalid;
10563
10564
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
10565 return qe_invalid;
10566
10567
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10568 return qe_invalid;
10569
10570
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10571 {
10572 80 setSprite(frozenspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10573 80 }
10574 80 }
10575
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10576 {
10577
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10578 return qe_invalid;
10579
10580
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
10581 return qe_invalid;
10582
10583
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10584 return qe_invalid;
10585
10586
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10587 {
10588 80 setSprite(frozen_waterspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10589 80 }
10590 80 }
10591
10592
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10593 {
10594
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10595 return qe_invalid;
10596
10597
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
10598 return qe_invalid;
10599
10600
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10601 return qe_invalid;
10602
10603
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10604 {
10605 80 setSprite(onfirespr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10606 80 }
10607 80 }
10608
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10609 {
10610
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10611 return qe_invalid;
10612
10613
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
10614 return qe_invalid;
10615
10616
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10617 return qe_invalid;
10618
10619
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10620 {
10621 80 setSprite(onfire_waterspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10622 80 }
10623 80 }
10624
10625
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10626 {
10627
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10628 return qe_invalid;
10629
10630
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
10631 return qe_invalid;
10632
10633
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10634 return qe_invalid;
10635
10636
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10637 {
10638 80 setSprite(diggingspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10639 80 }
10640 80 }
10641
10642
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10643 {
10644
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10645 return qe_invalid;
10646
10647
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&flip,f,keepdata))
10648 return qe_invalid;
10649
10650
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10651 return qe_invalid;
10652
10653
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10654 {
10655 80 setSprite(usingrodspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10656 80 }
10657 80 }
10658
10659
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10660 {
10661
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10662 return qe_invalid;
10663
10664
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&flip,f,keepdata))
10665 return qe_invalid;
10666
10667
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&extend,f,keepdata))
10668 return qe_invalid;
10669
10670
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10671 {
10672 80 setSprite(usingcanespr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10673 80 }
10674 80 }
10675
10676
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10677 {
10678
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10679 return qe_invalid;
10680
10681
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
10682 return qe_invalid;
10683
10684
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10685 return qe_invalid;
10686
10687
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10688 {
10689 80 setSprite(pushingspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10690 80 }
10691 80 }
10692
10693
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10694 {
10695
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10696 return qe_invalid;
10697
10698
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&flip,f,keepdata))
10699 return qe_invalid;
10700
10701
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&extend,f,keepdata))
10702 return qe_invalid;
10703
10704 80 byte frames = 0;
10705
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 72 times.
80 if(v_herosprites > 15)
10706 {
10707
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 72 times.
72 if(!p_getc(&frames,f,keepdata))
10708 return qe_invalid;
10709 72 }
10710
10711
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10712 {
10713 80 setSprite(liftingspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10714 80 liftingspr[q][spr_frames] = frames;
10715 80 }
10716 80 }
10717
10718
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10719 {
10720
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10721 return qe_invalid;
10722
10723
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&flip,f,keepdata))
10724 return qe_invalid;
10725
10726
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&extend,f,keepdata))
10727 return qe_invalid;
10728
10729
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10730 {
10731 80 setSprite(liftingwalkspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10732 80 }
10733 80 }
10734
10735
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10736 {
10737
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_igetl(&tile,f,keepdata))
10738 return qe_invalid;
10739
10740
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&flip,f,keepdata))
10741 return qe_invalid;
10742
10743
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10744 return qe_invalid;
10745
10746
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10747 {
10748 80 setSprite(stunnedspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10749 80 }
10750 80 }
10751
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10752 {
10753
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10754 return qe_invalid;
10755
10756
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&flip,f,keepdata))
10757 return qe_invalid;
10758
10759
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&extend,f,keepdata))
10760 return qe_invalid;
10761
10762
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10763 {
10764 80 setSprite(stunned_waterspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10765 80 }
10766 80 }
10767
10768
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10769 {
10770
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10771 return qe_invalid;
10772
10773
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&flip,f,keepdata))
10774 return qe_invalid;
10775
10776
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10777 return qe_invalid;
10778
10779
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10780 {
10781 80 setSprite(drowningspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10782 80 }
10783 80 }
10784
10785
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10786 {
10787
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10788 return qe_invalid;
10789
10790
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&flip,f,keepdata))
10791 return qe_invalid;
10792
10793
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&extend,f,keepdata))
10794 return qe_invalid;
10795
10796
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10797 {
10798 80 setSprite(drowning_lavaspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10799 80 }
10800 80 }
10801
10802
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10803 {
10804
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10805 return qe_invalid;
10806
10807
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&flip,f,keepdata))
10808 return qe_invalid;
10809
10810
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&extend,f,keepdata))
10811 return qe_invalid;
10812
10813
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10814 {
10815 80 setSprite(fallingspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10816 80 }
10817 80 }
10818
10819
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10820 {
10821
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10822 return qe_invalid;
10823
10824
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&flip,f,keepdata))
10825 return qe_invalid;
10826
10827
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&extend,f,keepdata))
10828 return qe_invalid;
10829
10830
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10831 {
10832 80 setSprite(shockedspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10833 80 }
10834 80 }
10835
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10836 {
10837
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10838 return qe_invalid;
10839
10840
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&flip,f,keepdata))
10841 return qe_invalid;
10842
10843
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&extend,f,keepdata))
10844 return qe_invalid;
10845
10846
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10847 {
10848 80 setSprite(shocked_waterspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10849 80 }
10850 80 }
10851
10852
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10853 {
10854
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10855 return qe_invalid;
10856
10857
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
10858 return qe_invalid;
10859
10860
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10861 return qe_invalid;
10862
10863
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10864 {
10865 80 setSprite(pullswordspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10866 80 }
10867 80 }
10868
10869
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10870 {
10871
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10872 return qe_invalid;
10873
10874
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&flip,f,keepdata))
10875 return qe_invalid;
10876
10877
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&extend,f,keepdata))
10878 return qe_invalid;
10879
10880
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10881 {
10882 80 setSprite(readingspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10883 80 }
10884 80 }
10885
10886
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10887 {
10888
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_igetl(&tile,f,keepdata))
10889 return qe_invalid;
10890
10891
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&flip,f,keepdata))
10892 return qe_invalid;
10893
10894
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
10895 return qe_invalid;
10896
10897
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10898 {
10899 80 setSprite(slash180spr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10900 80 }
10901 80 }
10902
10903
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10904 {
10905
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10906 return qe_invalid;
10907
10908
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&flip,f,keepdata))
10909 return qe_invalid;
10910
10911
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&extend,f,keepdata))
10912 return qe_invalid;
10913
10914
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10915 {
10916 80 setSprite(slashZ4spr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10917 80 }
10918 80 }
10919
10920
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10921 {
10922
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10923 return qe_invalid;
10924
10925
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&flip,f,keepdata))
10926 return qe_invalid;
10927
10928
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&extend,f,keepdata))
10929 return qe_invalid;
10930
10931
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10932 {
10933 80 setSprite(dashspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10934 80 }
10935 80 }
10936
10937
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
10938 {
10939
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
10940 return qe_invalid;
10941
10942
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&flip,f,keepdata))
10943 return qe_invalid;
10944
10945
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&extend,f,keepdata))
10946 return qe_invalid;
10947
10948
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
10949 {
10950 80 setSprite(bonkspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10951 80 }
10952 80 }
10953
10954
2/2
✓ Branch 0 taken 60 times.
✓ Branch 1 taken 20 times.
80 for(int32_t q = 0; q < 3; ++q) //Not directions; number of medallion sprs
10955 {
10956
1/2
✓ Branch 0 taken 60 times.
✗ Branch 1 not taken.
60 if(!p_igetl(&tile,f,keepdata))
10957 return qe_invalid;
10958
10959
1/2
✓ Branch 0 taken 60 times.
✗ Branch 1 not taken.
60 if(!p_getc(&flip,f,keepdata))
10960 return qe_invalid;
10961
10962
1/2
✓ Branch 0 taken 60 times.
✗ Branch 1 not taken.
60 if(!p_getc(&extend,f,keepdata))
10963 return qe_invalid;
10964
10965
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 60 times.
60 if(keepdata)
10966 {
10967 60 setSprite(medallionsprs[q], int32_t(tile), int32_t(flip), int32_t(extend));
10968 60 }
10969 60 }
10970 20 }
10971 else if(keepdata)
10972 {
10973 memset(frozenspr, 0, sizeof(frozenspr));
10974 memset(frozen_waterspr, 0, sizeof(frozen_waterspr));
10975 memset(onfirespr, 0, sizeof(onfirespr));
10976 memset(onfire_waterspr, 0, sizeof(onfire_waterspr));
10977 memset(diggingspr, 0, sizeof(diggingspr));
10978 memset(usingrodspr, 0, sizeof(usingrodspr));
10979 memset(usingcanespr, 0, sizeof(usingcanespr));
10980 memset(pushingspr, 0, sizeof(pushingspr));
10981 memset(liftingspr, 0, sizeof(liftingspr));
10982 memset(liftingwalkspr, 0, sizeof(liftingwalkspr));
10983 memset(stunnedspr, 0, sizeof(stunnedspr));
10984 memset(stunned_waterspr, 0, sizeof(stunned_waterspr));
10985 memset(fallingspr, 0, sizeof(fallingspr));
10986 memset(shockedspr, 0, sizeof(shockedspr));
10987 memset(shocked_waterspr, 0, sizeof(shocked_waterspr));
10988 memset(pullswordspr, 0, sizeof(pullswordspr));
10989 memset(readingspr, 0, sizeof(readingspr));
10990 memset(slash180spr, 0, sizeof(slash180spr));
10991 memset(slashZ4spr, 0, sizeof(slashZ4spr));
10992 memset(dashspr, 0, sizeof(dashspr));
10993 memset(bonkspr, 0, sizeof(bonkspr));
10994 memset(medallionsprs, 0, sizeof(medallionsprs));
10995 memset(holdspr[0][2], 0, sizeof(holdspr[0][2])); //Sword hold (Land)
10996 memset(holdspr[1][2], 0, sizeof(holdspr[1][2])); //Sword hold (Water)
10997 for(int32_t q = 0; q < 4; ++q)
10998 {
10999 for(int32_t p = 0; p < 3; ++p)
11000 {
11001 drowningspr[q][p] = divespr[q][p];
11002 drowning_lavaspr[q][p] = divespr[q][p];
11003 }
11004 }
11005 }
11006
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if (v_herosprites > 8)
11007 {
11008
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
11009 {
11010
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
11011 return qe_invalid;
11012
11013
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
11014 return qe_invalid;
11015
11016
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
11017 return qe_invalid;
11018
11019
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
11020 {
11021 80 setSprite(sideswimspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
11022 80 }
11023 80 }
11024 20 }
11025 else if (keepdata)
11026 {
11027 memset(sideswimspr, 0, sizeof(sideswimspr));
11028 }
11029
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if (v_herosprites > 9)
11030 {
11031
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
11032 {
11033
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
11034 return qe_invalid;
11035
11036
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
11037 return qe_invalid;
11038
11039
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
11040 return qe_invalid;
11041
11042
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
11043 {
11044 80 setSprite(sideswimslashspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
11045 80 }
11046 80 }
11047
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
11048 {
11049
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
11050 return qe_invalid;
11051
11052
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
11053 return qe_invalid;
11054
11055
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
11056 return qe_invalid;
11057
11058
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
11059 {
11060 80 setSprite(sideswimstabspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
11061 80 }
11062 80 }
11063
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
11064 {
11065
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
11066 return qe_invalid;
11067
11068
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
11069 return qe_invalid;
11070
11071
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
11072 return qe_invalid;
11073
11074
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
11075 {
11076 80 setSprite(sideswimpoundspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
11077 80 }
11078 80 }
11079
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
11080 {
11081
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
11082 return qe_invalid;
11083
11084
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
11085 return qe_invalid;
11086
11087
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
11088 return qe_invalid;
11089
11090
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
11091 {
11092 80 setSprite(sideswimchargespr[q], int32_t(tile), int32_t(flip), int32_t(extend));
11093 80 }
11094 80 }
11095 20 }
11096 else if (keepdata)
11097 {
11098 memset(sideswimslashspr, 0, sizeof(sideswimslashspr));
11099 memset(sideswimstabspr, 0, sizeof(sideswimstabspr));
11100 memset(sideswimpoundspr, 0, sizeof(sideswimpoundspr));
11101 memset(sideswimchargespr, 0, sizeof(sideswimchargespr));
11102 }
11103
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if (v_herosprites > 10)
11104 {
11105
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
11106 {
11107 int32_t hmr;
11108
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_igetl(&hmr,f,keepdata))
11109 return qe_invalid;
11110
11111
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
11112 {
11113 80 hammeroffsets[q] = hmr;
11114 80 }
11115 80 }
11116 20 }
11117 else if (keepdata)
11118 {
11119 for(int32_t q = 0; q < 4; ++q) hammeroffsets[q] = 0;
11120 }
11121
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if (v_herosprites > 11)
11122 {
11123
2/2
✓ Branch 0 taken 60 times.
✓ Branch 1 taken 20 times.
80 for(int32_t q = 0; q < 3; ++q)
11124 {
11125
1/2
✓ Branch 0 taken 60 times.
✗ Branch 1 not taken.
60 if(!p_igetl(&tile,f,keepdata))
11126 return qe_invalid;
11127
11128
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 60 times.
60 if(!p_getc(&flip,f,keepdata))
11129 return qe_invalid;
11130
11131
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 60 times.
60 if(!p_getc(&extend,f,keepdata))
11132 return qe_invalid;
11133
11134
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 60 times.
60 if(keepdata)
11135 {
11136 60 setSprite(sideswimholdspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
11137 60 }
11138 60 }
11139 20 }
11140 else if (keepdata)
11141 {
11142 memset(sideswimholdspr, 0, sizeof(sideswimholdspr));
11143 }
11144
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if (v_herosprites > 12)
11145 {
11146
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(!p_igetl(&tile,f,keepdata))
11147 return qe_invalid;
11148
11149
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(!p_getc(&flip,f,keepdata))
11150 return qe_invalid;
11151
11152
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(!p_getc(&extend,f,keepdata))
11153 return qe_invalid;
11154
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
20 if (keepdata)
11155 {
11156 20 setSprite(sideswimcastingspr, int32_t(tile), int32_t(flip), int32_t(extend));
11157 20 }
11158
11159 20 }
11160 else if (keepdata)
11161 {
11162 memset(sideswimcastingspr, 0, sizeof(sideswimcastingspr));
11163 }
11164
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if (v_herosprites > 13)
11165 {
11166
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
11167 {
11168
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
11169 return qe_invalid;
11170
11171
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
11172 return qe_invalid;
11173
11174
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
11175 return qe_invalid;
11176
11177
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
11178 {
11179 80 setSprite(sidedrowningspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
11180 80 }
11181 80 }
11182 20 }
11183 else if (keepdata)
11184 {
11185 memset(sidedrowningspr, 0, sizeof(sidedrowningspr));
11186 }
11187
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if (v_herosprites > 14)
11188 {
11189
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
100 for(int32_t q = 0; q < 4; ++q)
11190 {
11191
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_igetl(&tile,f,keepdata))
11192 return qe_invalid;
11193
11194
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&flip,f,keepdata))
11195 return qe_invalid;
11196
11197
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&extend,f,keepdata))
11198 return qe_invalid;
11199
11200
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(keepdata)
11201 {
11202 80 setSprite(revslashspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
11203 80 }
11204 80 }
11205 20 }
11206 else if (keepdata)
11207 {
11208 memset(revslashspr, 0, sizeof(revslashspr));
11209 }
11210
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if (v_herosprites > 7)
11211 {
11212 20 int32_t num_defense = wMax;
11213 20 byte def = 0;
11214
11215 //Set num_defense accordingly if changes to enum require version upgrade - Jman
11216 /*if(v_herosprites > [x])
11217 * {
11218 * num_defense = 146 //value of wMax on version 8
11219 * }
11220 */
11221
11222
2/2
✓ Branch 0 taken 2920 times.
✓ Branch 1 taken 20 times.
2940 for (int32_t q = 0; q < num_defense; q++)
11223 {
11224
1/2
✓ Branch 0 taken 2920 times.
✗ Branch 1 not taken.
2920 if (!p_getc(&def, f, keepdata))
11225 return qe_invalid;
11226
11227
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2920 times.
2920 if (keepdata)
11228 {
11229 2920 hero_defence[q] = def;
11230 2920 }
11231 2920 }
11232 20 }
11233 else if (keepdata)
11234 {
11235 int32_t num_defense = wMax;
11236 for (int32_t q = 0; q < num_defense; q++)
11237 {
11238 hero_defence[q] = 0;
11239 }
11240 }
11241 20 }
11242
11243 20 return 0;
11244 20 }
11245
11246
11247 93 int32_t readherosprites(PACKFILE *f, zquestheader *Header, bool keepdata)
11248 {
11249 //these are here to bypass compiler warnings about unused arguments
11250 93 Header=Header;
11251
11252 dword dummy;
11253 93 word s_version=0, s_cversion=0;
11254
11255 //section version info
11256
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(!p_igetw(&s_version,f,true))
11257 {
11258 return qe_invalid;
11259 }
11260
11261 93 FFCore.quest_format[vHeroSprites] = s_version;
11262
11263 //al_trace("Player sprites version %d\n", s_version);
11264
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_cversion,f,true))
11265 {
11266 return qe_invalid;
11267 }
11268
11269 //section size
11270
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&dummy,f,true))
11271 {
11272 return qe_invalid;
11273 }
11274
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if ( s_version >= 6 )
11275 {
11276 //al_trace("Reading Player Sprites v6\n");
11277 20 return readherosprites3(f, s_version, dummy, keepdata);
11278 }
11279 73 else return readherosprites2(f, s_version, dummy, keepdata);
11280 93 }
11281
11282 93 int32_t readsubscreens(PACKFILE *f, zquestheader *Header, bool keepdata)
11283 {
11284 int32_t dummy;
11285 93 word s_version=0, s_cversion=0;
11286
11287 //section version info
11288
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(!p_igetw(&s_version,f,true))
11289 {
11290 return qe_invalid;
11291 }
11292
11293 93 FFCore.quest_format[vSubscreen] = s_version;
11294
11295 //al_trace("Subscreens version %d\n", s_version);
11296
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_cversion,f,true))
11297 {
11298 return qe_invalid;
11299 }
11300
11301 //section size
11302
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&dummy,f,true))
11303 {
11304 return qe_invalid;
11305 }
11306
11307 //finally... section data
11308
2/2
✓ Branch 0 taken 11904 times.
✓ Branch 1 taken 93 times.
11997 for(int32_t i=0; i<MAXCUSTOMSUBSCREENS; i++)
11309 {
11310 11904 int32_t ret = read_one_subscreen(f, Header, keepdata, i, s_version, s_cversion);
11311
11312
1/2
✓ Branch 0 taken 11904 times.
✗ Branch 1 not taken.
11904 if(ret!=0) return ret;
11313 11904 }
11314
11315 93 return 0;
11316 93 }
11317
11318 11904 int32_t read_one_subscreen(PACKFILE *f, zquestheader *, bool keepdata, int32_t i, word s_version, word)
11319 {
11320 11904 int32_t numsub=0;
11321 11904 byte temp_ss=0;
11322 subscreen_object temp_sub_stack;
11323 11904 subscreen_object *temp_sub = &temp_sub_stack;
11324
11325 char tempname[64];
11326
11327
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 11904 times.
11904 if(!pfread(tempname,64,f,true))
11328 {
11329 return qe_invalid;
11330 }
11331
11332
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 11904 times.
11904 if(s_version > 1)
11333 {
11334
1/2
✓ Branch 0 taken 11904 times.
✗ Branch 1 not taken.
11904 if(!p_getc(&temp_ss,f,keepdata))
11335 {
11336 return qe_invalid;
11337 }
11338 11904 }
11339
11340
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 11904 times.
11904 if(s_version < 4)
11341 {
11342 uint8_t tmp=0;
11343
11344 if(!p_getc(&tmp,f,true))
11345 {
11346 return qe_invalid;
11347 }
11348
11349 numsub = (int32_t)tmp;
11350 }
11351 else
11352 {
11353 word tmp;
11354
11355
1/2
✓ Branch 0 taken 11904 times.
✗ Branch 1 not taken.
11904 if(!p_igetw(&tmp, f, true))
11356 {
11357 return qe_invalid;
11358 }
11359
11360 11904 numsub = (int32_t)tmp;
11361 }
11362
11363 int32_t j;
11364
11365
3/4
✗ Branch 0 not taken.
✓ Branch 1 taken 30522 times.
✓ Branch 2 taken 18618 times.
✓ Branch 3 taken 11904 times.
30522 for(j=0; (j<MAXSUBSCREENITEMS&&j<numsub); j++)
11366 {
11367
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 18618 times.
18618 if(keepdata)
11368 {
11369 18618 memset(temp_sub,0,sizeof(subscreen_object));
11370
11371
2/2
✓ Branch 0 taken 1136 times.
✓ Branch 1 taken 17482 times.
18618 switch(custom_subscreen[i].objects[j].type)
11372 {
11373 case ssoTEXT:
11374 case ssoTEXTBOX:
11375 case ssoCURRENTITEMTEXT:
11376 case ssoCURRENTITEMCLASSTEXT:
11377
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 1136 times.
✓ Branch 2 taken 1136 times.
✗ Branch 3 not taken.
1136 if(custom_subscreen[i].objects[j].dp1 != NULL) delete [](char *)custom_subscreen[i].objects[j].dp1;
11378
11379 //fall through
11380 default:
11381 18618 memset(&custom_subscreen[i].objects[j],0,sizeof(subscreen_object));
11382 18618 break;
11383 }
11384 18618 }
11385
11386
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_getc(&(temp_sub->type),f,true))
11387 {
11388 return qe_invalid;
11389 }
11390
11391
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_getc(&(temp_sub->pos),f,keepdata))
11392 {
11393 return qe_invalid;
11394 }
11395
11396
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(s_version < 5)
11397 {
11398 switch(temp_sub->pos)
11399 {
11400 case 0:
11401 temp_sub->pos = sspUP | sspDOWN | sspSCROLLING;
11402 break;
11403
11404 case 1:
11405 temp_sub->pos = sspUP;
11406 break;
11407
11408 case 2:
11409 temp_sub->pos = sspDOWN;
11410 break;
11411
11412 default:
11413 temp_sub->pos = 0;
11414 }
11415 }
11416
11417
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_igetw(&(temp_sub->x),f,keepdata))
11418 {
11419 return qe_invalid;
11420 }
11421
11422
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_igetw(&(temp_sub->y),f,keepdata))
11423 {
11424 return qe_invalid;
11425 }
11426
11427
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_igetw(&(temp_sub->w),f,keepdata))
11428 {
11429 return qe_invalid;
11430 }
11431
11432
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_igetw(&(temp_sub->h),f,keepdata))
11433 {
11434 return qe_invalid;
11435 }
11436
11437
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_getc(&(temp_sub->colortype1),f,keepdata))
11438 {
11439 return qe_invalid;
11440 }
11441
11442
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_igetw(&(temp_sub->color1),f,keepdata))
11443 {
11444 return qe_invalid;
11445 }
11446
11447
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_getc(&(temp_sub->colortype2),f,keepdata))
11448 {
11449 return qe_invalid;
11450 }
11451
11452
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_igetw(&(temp_sub->color2),f,keepdata))
11453 {
11454 return qe_invalid;
11455 }
11456
11457
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_getc(&(temp_sub->colortype3),f,keepdata))
11458 {
11459 return qe_invalid;
11460 }
11461
11462
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_igetw(&(temp_sub->color3),f,keepdata))
11463 {
11464 return qe_invalid;
11465 }
11466
11467
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_igetd(&(temp_sub->d1),f,keepdata))
11468 {
11469 return qe_invalid;
11470 }
11471
11472
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_igetd(&(temp_sub->d2),f,keepdata))
11473 {
11474 return qe_invalid;
11475 }
11476
11477
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_igetd(&(temp_sub->d3),f,keepdata))
11478 {
11479 return qe_invalid;
11480 }
11481
11482
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_igetd(&(temp_sub->d4),f,keepdata))
11483 {
11484 return qe_invalid;
11485 }
11486
11487
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_igetd(&(temp_sub->d5),f,keepdata))
11488 {
11489 return qe_invalid;
11490 }
11491
11492
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_igetd(&(temp_sub->d6),f,keepdata))
11493 {
11494 return qe_invalid;
11495 }
11496
11497
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_igetd(&(temp_sub->d7),f,keepdata))
11498 {
11499 return qe_invalid;
11500 }
11501
11502
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_igetd(&(temp_sub->d8),f,keepdata))
11503 {
11504 return qe_invalid;
11505 }
11506
11507
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_igetd(&(temp_sub->d9),f,keepdata))
11508 {
11509 return qe_invalid;
11510 }
11511
11512
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_igetd(&(temp_sub->d10),f,keepdata))
11513 {
11514 return qe_invalid;
11515 }
11516
11517
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 18618 times.
18618 if(s_version < 2)
11518 {
11519 if(!p_igetl(&(temp_sub->speed),f,keepdata))
11520 {
11521 return qe_invalid;
11522 }
11523
11524 if(!p_igetl(&(temp_sub->delay),f,keepdata))
11525 {
11526 return qe_invalid;
11527 }
11528
11529 if(!p_igetl(&(temp_sub->frame),f,keepdata))
11530 {
11531 return qe_invalid;
11532 }
11533 }
11534 else
11535 {
11536
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_getc(&(temp_sub->speed),f,keepdata))
11537 {
11538 return qe_invalid;
11539 }
11540
11541
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_getc(&(temp_sub->delay),f,keepdata))
11542 {
11543 return qe_invalid;
11544 }
11545
11546
1/2
✓ Branch 0 taken 18618 times.
✗ Branch 1 not taken.
18618 if(!p_igetw(&(temp_sub->frame),f,keepdata))
11547 {
11548 return qe_invalid;
11549 }
11550 }
11551
11552 18618 int32_t temp_size=0;
11553
11554 // bool deletets = false;
11555
4/4
✓ Branch 0 taken 7940 times.
✓ Branch 1 taken 1557 times.
✓ Branch 2 taken 8978 times.
✓ Branch 3 taken 143 times.
18618 switch(temp_sub->type)
11556 {
11557 case ssoTEXT:
11558 case ssoTEXTBOX:
11559 case ssoCURRENTITEMTEXT:
11560 case ssoCURRENTITEMCLASSTEXT:
11561 word temptempsize;
11562 /*uint8_t temp1;
11563 uint8_t temp2;
11564 temp2 = 0;
11565 if(!p_getc(&temp1,f,true))
11566 {
11567 return qe_invalid;
11568 }
11569 if(temp1)
11570 {
11571
11572 if(!p_getc(&temp2,f,true))
11573 {
11574 return qe_invalid;
11575 }
11576 }*/
11577
11578
1/2
✓ Branch 0 taken 1557 times.
✗ Branch 1 not taken.
1557 if(!p_igetw(&temptempsize,f,true))
11579 {
11580 return qe_invalid;
11581 }
11582
11583 //temptempsize = temp1 + (temp2 << 8);
11584 1557 temp_size = (int32_t)temptempsize;
11585
11586 //if(temp_sub->dp1!=NULL) delete[] temp_sub->dp1;
11587
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1557 times.
1557 if(keepdata)
11588 {
11589 1557 uint32_t char_length = temp_size+1;
11590 1557 temp_sub->dp1 = new char[char_length]; //memory not freed
11591
11592 //deletets = true; //obsolete
11593 1557 }
11594
11595
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1557 times.
1557 if(temp_size)
11596 {
11597
1/2
✓ Branch 0 taken 1557 times.
✗ Branch 1 not taken.
1557 if(!pfread(temp_sub->dp1,temp_size+1,f,keepdata))
11598 {
11599 return qe_invalid;
11600 }
11601 1557 }
11602
11603 1557 break;
11604
11605 case ssoLIFEMETER:
11606
1/2
✓ Branch 0 taken 143 times.
✗ Branch 1 not taken.
143 if(get_bit(deprecated_rules, 12) != 0) // qr_24HC
11607 temp_sub->d3 = 1;
11608
11609
1/2
✓ Branch 0 taken 143 times.
✗ Branch 1 not taken.
143 if(!p_getc(&(temp_sub->dp1),f,keepdata))
11610 {
11611 return qe_invalid;
11612 }
11613
11614 143 break;
11615
11616
11617 case ssoCURRENTITEM:
11618
11619
1/2
✓ Branch 0 taken 7940 times.
✗ Branch 1 not taken.
7940 if(s_version < 6)
11620 {
11621 switch(temp_sub->d1)
11622 {
11623 case ssiBOMB:
11624 temp_sub->d1 = itype_bomb;
11625 break;
11626
11627 case ssiSWORD:
11628 temp_sub->d1 = itype_sword;
11629 break;
11630
11631 case ssiSHIELD:
11632 temp_sub->d1 = itype_shield;
11633 break;
11634
11635 case ssiCANDLE:
11636 temp_sub->d1 = itype_candle;
11637 break;
11638
11639 case ssiLETTER:
11640 temp_sub->d1 = itype_letter;
11641 break;
11642
11643 case ssiPOTION:
11644 temp_sub->d1 = itype_potion;
11645 break;
11646
11647 case ssiLETTERPOTION:
11648 temp_sub->d1 = itype_letterpotion;
11649 break;
11650
11651 case ssiBOW:
11652 temp_sub->d1 = itype_bow;
11653 break;
11654
11655 case ssiARROW:
11656 temp_sub->d1 = itype_arrow;
11657 break;
11658
11659 case ssiBOWANDARROW:
11660 temp_sub->d1 = itype_bowandarrow;
11661 break;
11662
11663 case ssiBAIT:
11664 temp_sub->d1 = itype_bait;
11665 break;
11666
11667 case ssiRING:
11668 temp_sub->d1 = itype_ring;
11669 break;
11670
11671 case ssiBRACELET:
11672 temp_sub->d1 = itype_bracelet;
11673 break;
11674
11675 case ssiMAP:
11676 temp_sub->d1 = itype_map;
11677 break;
11678
11679 case ssiCOMPASS:
11680 temp_sub->d1 = itype_compass;
11681 break;
11682
11683 case ssiBOSSKEY:
11684 temp_sub->d1 = itype_bosskey;
11685 break;
11686
11687 case ssiMAGICKEY:
11688 temp_sub->d1 = itype_magickey;
11689 break;
11690
11691 case ssiBRANG:
11692 temp_sub->d1 = itype_brang;
11693 break;
11694
11695 case ssiWAND:
11696 temp_sub->d1 = itype_wand;
11697 break;
11698
11699 case ssiRAFT:
11700 temp_sub->d1 = itype_raft;
11701 break;
11702
11703 case ssiLADDER:
11704 temp_sub->d1 = itype_ladder;
11705 break;
11706
11707 case ssiWHISTLE:
11708 temp_sub->d1 = itype_whistle;
11709 break;
11710
11711 case ssiBOOK:
11712 temp_sub->d1 = itype_book;
11713 break;
11714
11715 case ssiWALLET:
11716 temp_sub->d1 = itype_wallet;
11717 break;
11718
11719 case ssiSBOMB:
11720 temp_sub->d1 = itype_sbomb;
11721 break;
11722
11723 case ssiHCPIECE:
11724 temp_sub->d1 = itype_heartpiece;
11725 break;
11726
11727 case ssiAMULET:
11728 temp_sub->d1 = itype_amulet;
11729 break;
11730
11731 case ssiFLIPPERS:
11732 temp_sub->d1 = itype_flippers;
11733 break;
11734
11735 case ssiHOOKSHOT:
11736 temp_sub->d1 = itype_hookshot;
11737 break;
11738
11739 case ssiLENS:
11740 temp_sub->d1 = itype_lens;
11741 break;
11742
11743 case ssiHAMMER:
11744 temp_sub->d1 = itype_hammer;
11745 break;
11746
11747 case ssiBOOTS:
11748 temp_sub->d1 = itype_boots;
11749 break;
11750
11751 case ssiDINSFIRE:
11752 temp_sub->d1 = itype_dinsfire;
11753 break;
11754
11755 case ssiFARORESWIND:
11756 temp_sub->d1 = itype_faroreswind;
11757 break;
11758
11759 case ssiNAYRUSLOVE:
11760 temp_sub->d1 = itype_nayruslove;
11761 break;
11762
11763 case ssiQUIVER:
11764 temp_sub->d1 = itype_quiver;
11765 break;
11766
11767 case ssiBOMBBAG:
11768 temp_sub->d1 = itype_bombbag;
11769 break;
11770
11771 case ssiCBYRNA:
11772 temp_sub->d1 = itype_cbyrna;
11773 break;
11774
11775 case ssiROCS:
11776 temp_sub->d1 = itype_rocs;
11777 break;
11778
11779 case ssiHOVERBOOTS:
11780 temp_sub->d1 = itype_hoverboots;
11781 break;
11782
11783 case ssiSPINSCROLL:
11784 temp_sub->d1 = itype_spinscroll;
11785 break;
11786
11787 case ssiCROSSSCROLL:
11788 temp_sub->d1 = itype_crossscroll;
11789 break;
11790
11791 case ssiQUAKESCROLL:
11792 temp_sub->d1 = itype_quakescroll;
11793 break;
11794
11795 case ssiWHISPRING:
11796 temp_sub->d1 = itype_whispring;
11797 break;
11798
11799 case ssiCHARGERING:
11800 temp_sub->d1 = itype_chargering;
11801 break;
11802
11803 case ssiPERILSCROLL:
11804 temp_sub->d1 = itype_perilscroll;
11805 break;
11806
11807 case ssiWEALTHMEDAL:
11808 temp_sub->d1 = itype_wealthmedal;
11809 break;
11810
11811 case ssiHEARTRING:
11812 temp_sub->d1 = itype_heartring;
11813 break;
11814
11815 case ssiMAGICRING:
11816 temp_sub->d1 = itype_magicring;
11817 break;
11818
11819 case ssiSPINSCROLL2:
11820 temp_sub->d1 = itype_spinscroll2;
11821 break;
11822
11823 case ssiQUAKESCROLL2:
11824 temp_sub->d1 = itype_quakescroll2;
11825 break;
11826
11827 case ssiAGONY:
11828 temp_sub->d1 = itype_agony;
11829 break;
11830
11831 case ssiSTOMPBOOTS:
11832 temp_sub->d1 = itype_stompboots;
11833 break;
11834
11835 case ssiWHIMSICALRING:
11836 temp_sub->d1 = itype_whimsicalring;
11837 break;
11838
11839 case ssiPERILRING:
11840 temp_sub->d1 = itype_perilring;
11841 break;
11842
11843 default:
11844 temp_sub->d1 += itype_custom1 - ssiMAX;
11845 }
11846 }
11847
11848 //fall-through
11849 default:
11850
1/2
✓ Branch 0 taken 16918 times.
✗ Branch 1 not taken.
16918 if(!p_getc(&(temp_sub->dp1),f,keepdata))
11851 {
11852 return qe_invalid;
11853 }
11854
11855 16918 break;
11856 }
11857
11858
2/2
✓ Branch 0 taken 10250 times.
✓ Branch 1 taken 8368 times.
18618 if(s_version < 7)
11859 {
11860
3/3
✓ Branch 0 taken 7828 times.
✓ Branch 1 taken 204 times.
✓ Branch 2 taken 336 times.
8368 switch(temp_sub->type)
11861 {
11862 case ssoMAGICGAUGE:
11863 {
11864
2/2
✓ Branch 0 taken 12 times.
✓ Branch 1 taken 192 times.
204 if(!temp_sub->d9)
11865 192 temp_sub->d9 = -1; //-1 now represents 'always'
11866 204 break;
11867 }
11868 case ssoLIFEGAUGE:
11869 336 temp_sub->d9 = 0; //Unused, doesn't do anything? Clear it...
11870 336 break;
11871 }
11872 8368 }
11873
11874
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 18618 times.
18618 if(keepdata)
11875 {
11876
3/3
✓ Branch 0 taken 1557 times.
✓ Branch 1 taken 16275 times.
✓ Branch 2 taken 786 times.
18618 switch(temp_sub->type)
11877 {
11878 case ssoTEXT:
11879 case ssoTEXTBOX:
11880 case ssoCURRENTITEMTEXT:
11881 case ssoCURRENTITEMCLASSTEXT:
11882
1/4
✓ Branch 0 taken 1557 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1557 if(custom_subscreen[i].objects[j].dp1 != NULL) delete[](char *)custom_subscreen[i].objects[j].dp1;
11883
11884 1557 memcpy(&custom_subscreen[i].objects[j],temp_sub,sizeof(subscreen_object));
11885 1557 custom_subscreen[i].objects[j].dp1 = NULL;
11886 1557 custom_subscreen[i].objects[j].dp1 = new char[temp_size+1];
11887 1557 strcpy((char*)custom_subscreen[i].objects[j].dp1,(char*)temp_sub->dp1);
11888 1557 break;
11889
11890 case ssoCOUNTER:
11891
1/2
✓ Branch 0 taken 786 times.
✗ Branch 1 not taken.
786 if(s_version<3)
11892 {
11893 temp_sub->d6=(temp_sub->d6?1:0)+(temp_sub->d8?2:0);
11894 temp_sub->d8=0;
11895 }
11896
11897 default:
11898 17061 memcpy(&custom_subscreen[i].objects[j],temp_sub,sizeof(subscreen_object));
11899 17061 break;
11900 }
11901
11902 18618 strcpy(custom_subscreen[i].name, tempname);
11903 18618 custom_subscreen[i].ss_type = temp_ss;
11904 18618 }
11905 18618 }
11906
11907
2/2
✓ Branch 0 taken 3028806 times.
✓ Branch 1 taken 11904 times.
3040710 for(j=numsub; j<MAXSUBSCREENITEMS; j++)
11908 {
11909
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3028806 times.
3028806 if(keepdata)
11910 {
11911 //clear all unused object in this subscreen -DD
11912
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3028806 times.
3028806 switch(custom_subscreen[i].objects[j].type)
11913 {
11914 case ssoTEXT:
11915 case ssoTEXTBOX:
11916 case ssoCURRENTITEMTEXT:
11917 case ssoCURRENTITEMCLASSTEXT:
11918 if(custom_subscreen[i].objects[j].dp1 != NULL) delete [](char *)custom_subscreen[i].objects[j].dp1;
11919
11920 //fall through
11921 default:
11922 3028806 memset(&custom_subscreen[i].objects[j],0,sizeof(subscreen_object));
11923 3028806 break;
11924 }
11925 3028806 }
11926 3028806 }
11927
11928 11904 return 0;
11929 11904 }
11930
11931 1664 void reset_subscreen(subscreen_group *tempss)
11932 {
11933
2/2
✓ Branch 0 taken 425984 times.
✓ Branch 1 taken 1664 times.
427648 for(int32_t i=0; i<MAXSUBSCREENITEMS; ++i)
11934 {
11935
2/2
✓ Branch 0 taken 89 times.
✓ Branch 1 taken 425895 times.
425984 switch(tempss->objects[i].type)
11936 {
11937 case ssoTEXT:
11938 case ssoTEXTBOX:
11939 case ssoCURRENTITEMTEXT:
11940 case ssoCURRENTITEMCLASSTEXT:
11941
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 89 times.
✓ Branch 2 taken 89 times.
✗ Branch 3 not taken.
89 if(tempss->objects[i].dp1 != NULL) delete [](char *)tempss->objects[i].dp1;
11942
11943 //fall through
11944 default:
11945 425984 memset(&tempss->objects[i],0,sizeof(subscreen_object));
11946 425984 break;
11947 }
11948 425984 }
11949 1664 }
11950
11951 13 void reset_subscreens()
11952 {
11953
2/2
✓ Branch 0 taken 1664 times.
✓ Branch 1 taken 13 times.
1677 for(int32_t i=0; i<MAXCUSTOMSUBSCREENS; ++i)
11954 {
11955 1664 reset_subscreen(&custom_subscreen[i]);
11956 1664 }
11957 13 }
11958
11959 13 int32_t setupsubscreens()
11960 {
11961 13 reset_subscreens();
11962 13 int32_t tempsubscreen=zinit.subscreen;
11963 subscreen_object *tempsub;
11964
11965
1/2
✓ Branch 0 taken 13 times.
✗ Branch 1 not taken.
13 if(tempsubscreen>=ssdtMAX)
11966 {
11967 tempsubscreen=0;
11968 }
11969
11970
1/3
✗ Branch 0 not taken.
✓ Branch 1 taken 13 times.
✗ Branch 2 not taken.
13 switch(tempsubscreen)
11971 {
11972 case ssdtOLD:
11973 case ssdtNEWSUBSCR:
11974 case ssdtREV2:
11975 case ssdtBSZELDA:
11976 case ssdtBSZELDAMODIFIED:
11977 case ssdtBSZELDAENHANCED:
11978 case ssdtBSZELDACOMPLETE:
11979 {
11980 13 tempsub = default_subscreen_active[tempsubscreen][0];
11981 int32_t i;
11982
11983
3/4
✗ Branch 0 not taken.
✓ Branch 1 taken 858 times.
✓ Branch 2 taken 845 times.
✓ Branch 3 taken 13 times.
858 for(i=0; (i<MAXSUBSCREENITEMS&&tempsub[i].type!=ssoNULL); i++)
11984 {
11985
2/3
✓ Branch 0 taken 42 times.
✓ Branch 1 taken 803 times.
✗ Branch 2 not taken.
845 switch(tempsub[i].type)
11986 {
11987 case ssoTEXT:
11988 case ssoTEXTBOX:
11989 case ssoCURRENTITEMTEXT:
11990 case ssoCURRENTITEMCLASSTEXT:
11991
1/4
✓ Branch 0 taken 42 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
42 if(custom_subscreen[0].objects[i].dp1 != NULL) delete [](char *)custom_subscreen[0].objects[i].dp1;
11992
11993 42 memcpy(&custom_subscreen[0].objects[i],&tempsub[i],sizeof(subscreen_object));
11994 42 custom_subscreen[0].objects[i].dp1 = NULL;
11995 42 custom_subscreen[0].objects[i].dp1 = new char[strlen((char*)tempsub[i].dp1)+1];
11996 42 strcpy((char*)custom_subscreen[0].objects[i].dp1,(char*)tempsub[i].dp1);
11997 42 break;
11998
11999 case ssoLIFEMETER:
12000 {
12001 memcpy(&custom_subscreen[0].objects[i],&tempsub[i],sizeof(subscreen_object));
12002
12003 if(get_bit(deprecated_rules, 12) != 0)
12004 custom_subscreen[0].objects[i].d3=1;
12005 else
12006 custom_subscreen[0].objects[i].d3=0;
12007
12008 break;
12009 }
12010 /*
12011 case ssoTRIFRAME:
12012 {
12013 memcpy(&custom_subscreen[0].objects[i],&tempsub[i],sizeof(subscreen_object));
12014 custom_subscreen[0].objects[i].d1 = 8594;
12015 custom_subscreen[0].objects[i].d2 = 8;
12016 custom_subscreen[0].objects[i].d3 = 8771;
12017 custom_subscreen[0].objects[i].d4 = 8;
12018 custom_subscreen[0].objects[i].d5 = 1;
12019 custom_subscreen[0].objects[i].d6 = 1;
12020 break;
12021 }*/
12022
12023 default:
12024 803 memcpy(&custom_subscreen[0].objects[i],&tempsub[i],sizeof(subscreen_object));
12025 803 break;
12026 }
12027 845 }
12028
12029 13 custom_subscreen[0].ss_type=sstACTIVE;
12030 13 sprintf(custom_subscreen[0].name, "Active Subscreen (Triforce)");
12031 13 tempsub = default_subscreen_active[tempsubscreen][1];
12032
12033
3/4
✗ Branch 0 not taken.
✓ Branch 1 taken 858 times.
✓ Branch 2 taken 845 times.
✓ Branch 3 taken 13 times.
858 for(i=0; (i<MAXSUBSCREENITEMS&&tempsub[i].type!=ssoNULL); i++)
12034 {
12035
2/3
✓ Branch 0 taken 55 times.
✓ Branch 1 taken 790 times.
✗ Branch 2 not taken.
845 switch(tempsub[i].type)
12036 {
12037 case ssoTEXT:
12038 case ssoTEXTBOX:
12039 case ssoCURRENTITEMTEXT:
12040 case ssoCURRENTITEMCLASSTEXT:
12041
1/4
✓ Branch 0 taken 55 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
55 if(custom_subscreen[1].objects[i].dp1 != NULL) delete [](char *)custom_subscreen[1].objects[i].dp1;
12042
12043 55 memcpy(&custom_subscreen[1].objects[i],&tempsub[i],sizeof(subscreen_object));
12044 55 custom_subscreen[1].objects[i].dp1 = NULL;
12045 55 custom_subscreen[1].objects[i].dp1 = new char[strlen((char*)tempsub[i].dp1)+1];
12046 55 strcpy((char*)custom_subscreen[1].objects[i].dp1,(char*)tempsub[i].dp1);
12047 55 break;
12048
12049 case ssoLIFEMETER:
12050 {
12051 memcpy(&custom_subscreen[1].objects[i],&tempsub[i],sizeof(subscreen_object));
12052
12053 if(get_bit(deprecated_rules, 12) != 0)
12054 custom_subscreen[1].objects[i].d3=1;
12055 else
12056 custom_subscreen[1].objects[i].d3=0;
12057
12058 break;
12059 }
12060 /*
12061 case ssoTRIFRAME:
12062 {
12063 custom_subscreen[1].objects[i].d1 = 8594;
12064 custom_subscreen[1].objects[i].d2 = 8;
12065 custom_subscreen[1].objects[i].d3 = 8771;
12066 custom_subscreen[1].objects[i].d4 = 8;
12067 custom_subscreen[1].objects[i].d5 = 1;
12068 custom_subscreen[1].objects[i].d6 = 1;
12069 break;
12070 }*/
12071
12072 default:
12073 790 memcpy(&custom_subscreen[1].objects[i],&tempsub[i],sizeof(subscreen_object));
12074 790 break;
12075 }
12076 845 }
12077
12078 13 custom_subscreen[1].ss_type=sstACTIVE;
12079 13 sprintf(custom_subscreen[1].name, "Active Subscreen (Dungeon Map)");
12080 // memset(&custom_subscreen[1].objects[i],0,sizeof(subscreen_object));
12081 13 tempsub = default_subscreen_passive[tempsubscreen][0];
12082
12083
3/4
✗ Branch 0 not taken.
✓ Branch 1 taken 273 times.
✓ Branch 2 taken 260 times.
✓ Branch 3 taken 13 times.
273 for(i=0; (i<MAXSUBSCREENITEMS&&tempsub[i].type!=ssoNULL); i++)
12084 {
12085
3/3
✓ Branch 0 taken 39 times.
✓ Branch 1 taken 208 times.
✓ Branch 2 taken 13 times.
260 switch(tempsub[i].type)
12086 {
12087 case ssoTEXT:
12088 case ssoTEXTBOX:
12089 case ssoCURRENTITEMTEXT:
12090 case ssoCURRENTITEMCLASSTEXT:
12091
1/4
✓ Branch 0 taken 39 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
39 if(custom_subscreen[2].objects[i].dp1 != NULL) delete [](char *)custom_subscreen[2].objects[i].dp1;
12092
12093 39 memcpy(&custom_subscreen[2].objects[i],&tempsub[i],sizeof(subscreen_object));
12094 39 custom_subscreen[2].objects[i].dp1 = NULL;
12095 39 custom_subscreen[2].objects[i].dp1 = new char[strlen((char*)tempsub[i].dp1)+1];
12096 39 strcpy((char*)custom_subscreen[2].objects[i].dp1,(char*)tempsub[i].dp1);
12097 39 break;
12098
12099 case ssoLIFEMETER:
12100 {
12101 13 memcpy(&custom_subscreen[2].objects[i],&tempsub[i],sizeof(subscreen_object));
12102
12103
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 13 times.
13 if(get_bit(deprecated_rules, 12) != 0)
12104 custom_subscreen[2].objects[i].d3=1;
12105 else
12106 13 custom_subscreen[2].objects[i].d3=0;
12107
12108 13 break;
12109 }
12110
12111 default:
12112 208 memcpy(&custom_subscreen[2].objects[i],&tempsub[i],sizeof(subscreen_object));
12113 208 break;
12114 }
12115 260 }
12116
12117 13 custom_subscreen[2].ss_type=sstPASSIVE;
12118 13 sprintf(custom_subscreen[2].name, "Passive Subscreen (Magic)");
12119 // memset(&custom_subscreen[2].objects[i],0,sizeof(subscreen_object));
12120 13 tempsub = default_subscreen_passive[tempsubscreen][1];
12121
12122
3/4
✗ Branch 0 not taken.
✓ Branch 1 taken 260 times.
✓ Branch 2 taken 247 times.
✓ Branch 3 taken 13 times.
260 for(i=0; (i<MAXSUBSCREENITEMS&&tempsub[i].type!=ssoNULL); i++)
12123 {
12124
3/3
✓ Branch 0 taken 39 times.
✓ Branch 1 taken 195 times.
✓ Branch 2 taken 13 times.
247 switch(tempsub[i].type)
12125 {
12126 case ssoTEXT:
12127 case ssoTEXTBOX:
12128 case ssoCURRENTITEMTEXT:
12129 case ssoCURRENTITEMCLASSTEXT:
12130
1/4
✓ Branch 0 taken 39 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
39 if(custom_subscreen[3].objects[i].dp1 != NULL) delete [](char *)custom_subscreen[3].objects[i].dp1;
12131
12132 39 memcpy(&custom_subscreen[3].objects[i],&tempsub[i],sizeof(subscreen_object));
12133 39 custom_subscreen[3].objects[i].dp1 = NULL;
12134 39 custom_subscreen[3].objects[i].dp1 = new char[strlen((char*)tempsub[i].dp1)+1];
12135 39 strcpy((char*)custom_subscreen[3].objects[i].dp1,(char*)tempsub[i].dp1);
12136 39 break;
12137
12138 case ssoLIFEMETER:
12139 {
12140 13 memcpy(&custom_subscreen[3].objects[i],&tempsub[i],sizeof(subscreen_object));
12141
12142
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 13 times.
13 if(get_bit(deprecated_rules, 12) != 0)
12143 custom_subscreen[3].objects[i].d3=1;
12144 else
12145 13 custom_subscreen[3].objects[i].d3=0;
12146
12147 13 break;
12148 }
12149
12150 default:
12151 195 memcpy(&custom_subscreen[3].objects[i],&tempsub[i],sizeof(subscreen_object));
12152 195 break;
12153 }
12154 247 }
12155
12156 13 custom_subscreen[3].ss_type=sstPASSIVE;
12157 13 sprintf(custom_subscreen[3].name, "Passive Subscreen (No Magic)");
12158 // memset(&custom_subscreen[3].objects[i],0,sizeof(subscreen_object));
12159 13 break;
12160 }
12161
12162 case ssdtZ3:
12163 {
12164 tempsub = z3_active_a;
12165 int32_t i;
12166
12167 for(i=0; (i<MAXSUBSCREENITEMS&&tempsub[i].type!=ssoNULL); i++)
12168 {
12169 switch(tempsub[i].type)
12170 {
12171 case ssoTEXT:
12172 case ssoTEXTBOX:
12173 case ssoCURRENTITEMTEXT:
12174 case ssoCURRENTITEMCLASSTEXT:
12175 if(custom_subscreen[0].objects[i].dp1 != NULL) delete [](char *)custom_subscreen[0].objects[i].dp1;
12176
12177 memcpy(&custom_subscreen[0].objects[i],&tempsub[i],sizeof(subscreen_object));
12178 custom_subscreen[0].objects[i].dp1 = NULL;
12179 custom_subscreen[0].objects[i].dp1 = new char[strlen((char*)tempsub[i].dp1)+1];
12180 strcpy((char*)custom_subscreen[0].objects[i].dp1,(char*)tempsub[i].dp1);
12181 break;
12182
12183 case ssoLIFEMETER:
12184 {
12185 memcpy(&custom_subscreen[0].objects[i],&tempsub[i],sizeof(subscreen_object));
12186
12187 if(get_bit(deprecated_rules, 12) != 0)
12188 custom_subscreen[0].objects[i].d3=1;
12189 else
12190 custom_subscreen[0].objects[i].d3=0;
12191
12192 break;
12193 }
12194
12195 default:
12196 memcpy(&custom_subscreen[0].objects[i],&tempsub[i],sizeof(subscreen_object));
12197 break;
12198 }
12199 }
12200
12201 custom_subscreen[0].ss_type=sstACTIVE;
12202 // memset(&custom_subscreen[0].objects[i],0,sizeof(subscreen_object));
12203 tempsub = z3_active_ab;
12204
12205 for(i=0; (i<MAXSUBSCREENITEMS&&tempsub[i].type!=ssoNULL); i++)
12206 {
12207 switch(tempsub[i].type)
12208 {
12209 case ssoTEXT:
12210 case ssoTEXTBOX:
12211 case ssoCURRENTITEMTEXT:
12212 case ssoCURRENTITEMCLASSTEXT:
12213 if(custom_subscreen[1].objects[i].dp1 != NULL) delete [](char *)custom_subscreen[1].objects[i].dp1;
12214
12215 memcpy(&custom_subscreen[1].objects[i],&tempsub[i],sizeof(subscreen_object));
12216 custom_subscreen[1].objects[i].dp1 = NULL;
12217 custom_subscreen[1].objects[i].dp1 = new char[strlen((char*)tempsub[i].dp1)+1];
12218 strcpy((char*)custom_subscreen[1].objects[i].dp1,(char*)tempsub[i].dp1);
12219 break;
12220
12221 case ssoLIFEMETER:
12222 {
12223 memcpy(&custom_subscreen[1].objects[i],&tempsub[i],sizeof(subscreen_object));
12224
12225 if(get_bit(deprecated_rules, 12) != 0)
12226 custom_subscreen[1].objects[i].d3=1;
12227 else
12228 custom_subscreen[1].objects[i].d3=0;
12229
12230 break;
12231 }
12232
12233 default:
12234 memcpy(&custom_subscreen[1].objects[i],&tempsub[i],sizeof(subscreen_object));
12235 break;
12236 }
12237 }
12238
12239 custom_subscreen[1].ss_type=sstACTIVE;
12240 // memset(&custom_subscreen[1].objects[i],0,sizeof(subscreen_object));
12241 tempsub = z3_passive_a;
12242
12243 for(i=0; (i<MAXSUBSCREENITEMS&&tempsub[i].type!=ssoNULL); i++)
12244 {
12245 switch(tempsub[i].type)
12246 {
12247 case ssoTEXT:
12248 case ssoTEXTBOX:
12249 case ssoCURRENTITEMTEXT:
12250 case ssoCURRENTITEMCLASSTEXT:
12251 if(custom_subscreen[2].objects[i].dp1 != NULL) delete [](char *)custom_subscreen[2].objects[i].dp1;
12252
12253 memcpy(&custom_subscreen[2].objects[i],&tempsub[i],sizeof(subscreen_object));
12254 custom_subscreen[2].objects[i].dp1 = NULL;
12255 custom_subscreen[2].objects[i].dp1 = new char[strlen((char*)tempsub[i].dp1)+1];
12256 strcpy((char*)custom_subscreen[2].objects[i].dp1,(char*)tempsub[i].dp1);
12257 break;
12258
12259 case ssoLIFEMETER:
12260 {
12261 memcpy(&custom_subscreen[2].objects[i],&tempsub[i],sizeof(subscreen_object));
12262
12263 if(get_bit(deprecated_rules, 12) != 0)
12264 custom_subscreen[2].objects[i].d3=1;
12265 else
12266 custom_subscreen[2].objects[i].d3=0;
12267
12268 break;
12269 }
12270
12271 default:
12272 memcpy(&custom_subscreen[2].objects[i],&tempsub[i],sizeof(subscreen_object));
12273 break;
12274 }
12275 }
12276
12277 custom_subscreen[2].ss_type=sstPASSIVE;
12278 // memset(&custom_subscreen[2].objects[i],0,sizeof(subscreen_object));
12279 tempsub = z3_passive_ab;
12280
12281 for(i=0; (i<MAXSUBSCREENITEMS&&tempsub[i].type!=ssoNULL); i++)
12282 {
12283 switch(tempsub[i].type)
12284 {
12285 case ssoTEXT:
12286 case ssoTEXTBOX:
12287 case ssoCURRENTITEMTEXT:
12288 case ssoCURRENTITEMCLASSTEXT:
12289 if(custom_subscreen[3].objects[i].dp1 != NULL) delete [](char *)custom_subscreen[3].objects[i].dp1;
12290
12291 memcpy(&custom_subscreen[3].objects[i],&tempsub[i],sizeof(subscreen_object));
12292 custom_subscreen[3].objects[i].dp1 = NULL;
12293 custom_subscreen[3].objects[i].dp1 = new char[strlen((char*)tempsub[i].dp1)+1];
12294 strcpy((char*)custom_subscreen[3].objects[i].dp1,(char*)tempsub[i].dp1);
12295 break;
12296
12297 case ssoLIFEMETER:
12298 {
12299 memcpy(&custom_subscreen[3].objects[i],&tempsub[i],sizeof(subscreen_object));
12300
12301 if(get_bit(deprecated_rules, 12) != 0)
12302 custom_subscreen[3].objects[i].d3=1;
12303 else
12304 custom_subscreen[3].objects[i].d3=0;
12305
12306 break;
12307 }
12308
12309 default:
12310 memcpy(&custom_subscreen[3].objects[i],&tempsub[i],sizeof(subscreen_object));
12311 break;
12312 }
12313 }
12314
12315 custom_subscreen[3].ss_type=sstPASSIVE;
12316 // memset(&custom_subscreen[3].objects[i],0,sizeof(subscreen_object));
12317 break;
12318 }
12319 }
12320
12321
2/2
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 52 times.
65 for(int32_t i=0; i<4; ++i)
12322 {
12323 52 purge_blank_subscreen_objects(&custom_subscreen[i]);
12324 52 }
12325
12326 13 return 0;
12327 }
12328
12329 extern script_data *ffscripts[NUMSCRIPTFFC];
12330 extern script_data *itemscripts[NUMSCRIPTITEM];
12331 extern script_data *guyscripts[NUMSCRIPTGUYS];
12332 extern script_data *wpnscripts[NUMSCRIPTWEAPONS];
12333 extern script_data *lwpnscripts[NUMSCRIPTWEAPONS];
12334 extern script_data *ewpnscripts[NUMSCRIPTWEAPONS];
12335 extern script_data *globalscripts[NUMSCRIPTGLOBAL];
12336 extern script_data *genericscripts[NUMSCRIPTSGENERIC];
12337 extern script_data *playerscripts[NUMSCRIPTPLAYER];
12338 extern script_data *screenscripts[NUMSCRIPTSCREEN];
12339 extern script_data *dmapscripts[NUMSCRIPTSDMAP];
12340 extern script_data *itemspritescripts[NUMSCRIPTSITEMSPRITE];
12341 extern script_data *comboscripts[NUMSCRIPTSCOMBODATA];
12342 //script_data *wpnscripts[NUMSCRIPTWEAPONS]; //used only for old data
12343
12344
12345
12346 93 int32_t readffscript(PACKFILE *f, zquestheader *Header, bool keepdata)
12347 {
12348 int32_t dummy;
12349 93 word s_version=0, s_cversion=0, zmeta_version=0;
12350 93 byte numscripts=0;
12351 93 numscripts=numscripts; //to avoid unused variables warnings
12352 int32_t ret;
12353
12354 //section version info
12355
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(!p_igetw(&s_version,f,true))
12356 {
12357 return qe_invalid;
12358 }
12359
12360 93 FFCore.quest_format[vFFScript] = s_version;
12361
12362
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_cversion,f,true))
12363 {
12364 return qe_invalid;
12365 }
12366
12367
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if(s_version >= 18)
12368 {
12369
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(!p_igetw(&zmeta_version,f,true))
12370 {
12371 return qe_invalid;
12372 }
12373 20 }
12374
12375 //al_trace("Scripts version %d\n", s_version);
12376 //section size
12377
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&dummy,f,true))
12378 {
12379 return qe_invalid;
12380 }
12381
12382 //ZScriptVersion::setVersion(s_version); ~this ideally, but there's no ZC/ZQuest defines...
12383 93 setZScriptVersion(s_version); //Lumped in zelda.cpp and in zquest.cpp as zquest can't link ZScriptVersion
12384 93 temp_ffscript_version = s_version;
12385 //miscQdata *the_misc;
12386
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if ( FFCore.quest_format[vLastCompile] < 13 ) FFCore.quest_format[vLastCompile] = s_version;
12387 93 al_trace("Loaded scripts last compiled in ZScript version: %d\n", (FFCore.quest_format[vLastCompile]));
12388
12389 //finally... section data
12390
2/2
✓ Branch 0 taken 47616 times.
✓ Branch 1 taken 93 times.
47709 for(int32_t i = 0; i < ((s_version < 2) ? NUMSCRIPTFFCOLD : NUMSCRIPTFFC); i++)
12391 {
12392 47616 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &ffscripts[i], zmeta_version);
12393
12394
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(ret != 0) return qe_invalid;
12395 47616 }
12396
12397 /* HIGHLY UNORTHODOX UPDATING THING, by Deedee
12398 * This fixes changes to sprite jump values introduced in early 2.55 alphas.
12399 * Zoria didn't bump up the versions as liberally as he should have, but thankfully
12400 * there was a version bump a week before a change that broke stuff.
12401 */
12402
6/8
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 20 times.
✓ Branch 4 taken 20 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 20 times.
✓ Branch 7 taken 73 times.
93 if(((Header->zelda_version < 0x253)||((Header->zelda_version == 0x253)&&(Header->build<33))||((Header->zelda_version > 0x253) && s_version < 12)) && keepdata)
12403 {
12404 73 set_bit(quest_rules,qr_SPRITE_JUMP_IS_TRUNCATED,1);
12405 73 }
12406
3/4
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 73 times.
93 if(s_version < 19 && keepdata)
12407 {
12408 73 set_bit(quest_rules,qr_FLUCTUATING_ENEMY_JUMP,1);
12409 73 }
12410
12411
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(s_version > 1)
12412 {
12413
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i = 0; i < NUMSCRIPTITEM; i++)
12414 {
12415 23808 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &itemscripts[i], zmeta_version);
12416
12417
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(ret != 0) return qe_invalid;
12418 23808 }
12419
12420
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i = 0; i < NUMSCRIPTGUYS; i++)
12421 {
12422 23808 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &guyscripts[i], zmeta_version);
12423
12424
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(ret != 0) return qe_invalid;
12425 23808 }
12426
12427
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i = 0; i < NUMSCRIPTWEAPONS; i++)
12428 {
12429 23808 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &wpnscripts[i], zmeta_version);
12430
12431
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(ret != 0) return qe_invalid;
12432 23808 }
12433
12434
12435
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i = 0; i < NUMSCRIPTSCREEN; i++)
12436 {
12437 23808 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &screenscripts[i], zmeta_version);
12438
12439
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 if(ret != 0) return qe_invalid;
12440 23808 }
12441
12442
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(s_version > 16)
12443 {
12444
2/2
✓ Branch 0 taken 160 times.
✓ Branch 1 taken 20 times.
180 for(int32_t i = 0; i < NUMSCRIPTGLOBAL; ++i)
12445 {
12446 160 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &globalscripts[i], zmeta_version);
12447
12448
1/2
✓ Branch 0 taken 160 times.
✗ Branch 1 not taken.
160 if(ret != 0) return qe_invalid;
12449 160 }
12450 20 }
12451
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 else if(s_version > 13)
12452 {
12453 for(int32_t i = 0; i < NUMSCRIPTGLOBAL255OLD; ++i)
12454 {
12455 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &globalscripts[i], zmeta_version);
12456
12457 if(ret != 0) return qe_invalid;
12458 }
12459
12460 if(globalscripts[GLOBAL_SCRIPT_ONSAVE] != NULL)
12461 delete globalscripts[GLOBAL_SCRIPT_ONSAVE];
12462
12463 globalscripts[GLOBAL_SCRIPT_ONSAVE] = new script_data();
12464 }
12465
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 else if(s_version > 4)
12466 {
12467
2/2
✓ Branch 0 taken 292 times.
✓ Branch 1 taken 73 times.
365 for(int32_t i = 0; i < NUMSCRIPTGLOBAL253; ++i)
12468 {
12469 292 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &globalscripts[i], zmeta_version);
12470
12471
1/2
✓ Branch 0 taken 292 times.
✗ Branch 1 not taken.
292 if(ret != 0) return qe_invalid;
12472 292 }
12473
12474
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(globalscripts[GLOBAL_SCRIPT_ONLAUNCH] != NULL)
12475
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 delete globalscripts[GLOBAL_SCRIPT_ONLAUNCH];
12476
12477
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 globalscripts[GLOBAL_SCRIPT_ONLAUNCH] = new script_data();
12478
12479
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(globalscripts[GLOBAL_SCRIPT_ONCONTGAME] != NULL)
12480
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 delete globalscripts[GLOBAL_SCRIPT_ONCONTGAME];
12481
12482
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 globalscripts[GLOBAL_SCRIPT_ONCONTGAME] = new script_data();
12483
12484
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(globalscripts[GLOBAL_SCRIPT_F6] != NULL)
12485
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 delete globalscripts[GLOBAL_SCRIPT_F6];
12486
12487
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 globalscripts[GLOBAL_SCRIPT_F6] = new script_data();
12488
12489
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(globalscripts[GLOBAL_SCRIPT_ONSAVE] != NULL)
12490
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 delete globalscripts[GLOBAL_SCRIPT_ONSAVE];
12491
12492
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 globalscripts[GLOBAL_SCRIPT_ONSAVE] = new script_data();
12493 73 }
12494 else
12495 {
12496 for(int32_t i = 0; i < NUMSCRIPTGLOBALOLD; i++)
12497 {
12498 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &globalscripts[i], zmeta_version);
12499
12500 if(ret != 0) return qe_invalid;
12501 }
12502
12503 if(globalscripts[GLOBAL_SCRIPT_ONSAVELOAD] != NULL)
12504 delete globalscripts[GLOBAL_SCRIPT_ONSAVELOAD];
12505
12506 globalscripts[GLOBAL_SCRIPT_ONSAVELOAD] = new script_data();
12507
12508 if(globalscripts[GLOBAL_SCRIPT_ONLAUNCH] != NULL)
12509 delete globalscripts[GLOBAL_SCRIPT_ONLAUNCH];
12510
12511 globalscripts[GLOBAL_SCRIPT_ONLAUNCH] = new script_data();
12512
12513 if(globalscripts[GLOBAL_SCRIPT_ONCONTGAME] != NULL)
12514 delete globalscripts[GLOBAL_SCRIPT_ONCONTGAME];
12515
12516 globalscripts[GLOBAL_SCRIPT_ONCONTGAME] = new script_data();
12517
12518 if(globalscripts[GLOBAL_SCRIPT_F6] != NULL)
12519 delete globalscripts[GLOBAL_SCRIPT_F6];
12520
12521 globalscripts[GLOBAL_SCRIPT_F6] = new script_data();
12522
12523 if(globalscripts[GLOBAL_SCRIPT_ONSAVE] != NULL)
12524 delete globalscripts[GLOBAL_SCRIPT_ONSAVE];
12525
12526 globalscripts[GLOBAL_SCRIPT_ONSAVE] = new script_data();
12527 }
12528
12529
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(s_version > 10) //expanded the number of Player scripts to 5.
12530 {
12531
2/2
✓ Branch 0 taken 100 times.
✓ Branch 1 taken 20 times.
120 for(int32_t i = 0; i < NUMSCRIPTPLAYER; i++)
12532 {
12533 100 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &playerscripts[i], zmeta_version);
12534
12535
1/2
✓ Branch 0 taken 100 times.
✗ Branch 1 not taken.
100 if(ret != 0) return qe_invalid;
12536 100 }
12537 20 }
12538 else
12539 {
12540
2/2
✓ Branch 0 taken 219 times.
✓ Branch 1 taken 73 times.
292 for(int32_t i = 0; i < NUMSCRIPTHEROOLD; i++)
12541 {
12542 219 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &playerscripts[i], zmeta_version);
12543
12544
1/2
✓ Branch 0 taken 219 times.
✗ Branch 1 not taken.
219 if(ret != 0) return qe_invalid;
12545 219 }
12546
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 if(playerscripts[3] != NULL)
12547
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 delete playerscripts[3];
12548
12549
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 playerscripts[3] = new script_data();
12550
12551
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 if(playerscripts[4] != NULL)
12552
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 delete playerscripts[4];
12553
12554
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 playerscripts[4] = new script_data();
12555 }
12556
3/4
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
93 if(s_version > 8 && s_version < 10)
12557 {
12558
12559 for(int32_t i = 0; i < NUMSCRIPTWEAPONS; i++)
12560 {
12561 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &ewpnscripts[i], zmeta_version);
12562
12563 if(ret != 0) return qe_invalid;
12564 }
12565 for(int32_t i = 0; i < NUMSCRIPTSDMAP; i++)
12566 {
12567 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &dmapscripts[i], zmeta_version);
12568
12569 if(ret != 0) return qe_invalid;
12570 }
12571
12572 }
12573
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if(s_version >= 10)
12574 {
12575
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 20 times.
5140 for(int32_t i = 0; i < NUMSCRIPTWEAPONS; i++)
12576 {
12577 5120 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &lwpnscripts[i], zmeta_version);
12578
12579
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(ret != 0) return qe_invalid;
12580 5120 }
12581
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 20 times.
5140 for(int32_t i = 0; i < NUMSCRIPTWEAPONS; i++)
12582 {
12583 5120 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &ewpnscripts[i], zmeta_version);
12584
12585
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(ret != 0) return qe_invalid;
12586 5120 }
12587
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 20 times.
5140 for(int32_t i = 0; i < NUMSCRIPTSDMAP; i++)
12588 {
12589 5120 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &dmapscripts[i], zmeta_version);
12590
12591
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(ret != 0) return qe_invalid;
12592 5120 }
12593
12594 20 }
12595
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if(s_version >=12)
12596 {
12597
2/2
✓ Branch 0 taken 5120 times.
✓ Branch 1 taken 20 times.
5140 for(int32_t i = 0; i < NUMSCRIPTSITEMSPRITE; i++)
12598 {
12599 5120 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &itemspritescripts[i], zmeta_version);
12600
12601
1/2
✓ Branch 0 taken 5120 times.
✗ Branch 1 not taken.
5120 if(ret != 0) return qe_invalid;
12602 5120 }
12603 20 }
12604
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if(s_version >=15)
12605 {
12606
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 20 times.
10260 for(int32_t i = 0; i < NUMSCRIPTSCOMBODATA; i++)
12607 {
12608 10240 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &comboscripts[i], zmeta_version);
12609
12610
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(ret != 0) return qe_invalid;
12611 10240 }
12612 20 }
12613
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if(s_version >19)
12614 {
12615 20 word numgenscripts = NUMSCRIPTSGENERIC;
12616
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(!p_igetw(&numgenscripts,f,true))
12617 {
12618 return qe_invalid;
12619 }
12620
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 20 times.
10260 for(int32_t i = 0; i < numgenscripts; i++)
12621 {
12622 10240 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &genericscripts[i], zmeta_version);
12623
12624
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(ret != 0) return qe_invalid;
12625 10240 }
12626 20 }
12627
12628 /*
12629 else //Is this trip really necessary?
12630 {
12631 for(int32_t i = 0; i < NUMSCRIPTWEAPONS; i++)
12632 {
12633
12634 ewpnscripts[i] = NULL;
12635 }
12636 for(int32_t i = 0; i < NUMSCRIPTSDMAP; i++)
12637 {
12638 dmapscripts[i] = NULL;
12639 }
12640 }
12641 */
12642
12643 93 }
12644
12645
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(s_version > 2)
12646 {
12647 int32_t bufsize;
12648 93 p_igetl(&bufsize, f, true);
12649 93 char * buf = new char[bufsize+1];
12650 93 pfread(buf, bufsize, f, true);
12651 93 buf[bufsize]=0;
12652
12653
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata)
12654
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 zScript = string(buf);
12655
12656
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 delete[] buf;
12657 word numffcbindings;
12658 93 p_igetw(&numffcbindings, f, true);
12659
12660
2/2
✓ Branch 0 taken 936 times.
✓ Branch 1 taken 93 times.
1029 for(int32_t i=0; i<numffcbindings; i++)
12661 {
12662 word id;
12663 936 p_igetw(&id, f, true);
12664 936 p_igetl(&bufsize, f, true);
12665 936 buf = new char[bufsize+1];
12666 936 pfread(buf, bufsize, f, true);
12667 936 buf[bufsize]=0;
12668
12669 //fix for buggy older saved quests -DD
12670
2/4
✓ Branch 0 taken 936 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 936 times.
936 if(keepdata && id < NUMSCRIPTFFC-1)
12671 936 ffcmap[id].scriptname = buf;
12672
12673
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 936 times.
936 delete[] buf;
12674 936 }
12675
12676 word numglobalbindings;
12677 93 p_igetw(&numglobalbindings, f, true);
12678
12679
2/2
✓ Branch 0 taken 386 times.
✓ Branch 1 taken 93 times.
479 for(int32_t i=0; i<numglobalbindings; i++)
12680 {
12681 word id;
12682 386 p_igetw(&id, f, true);
12683 386 p_igetl(&bufsize, f, true);
12684 386 buf = new char[bufsize+1];
12685 386 pfread(buf, bufsize, f, true);
12686 386 buf[bufsize]=0;
12687
12688 // id in principle should be valid, since slot assignment cannot assign a global script to a bogus slot.
12689 // However, because of a corruption bug, some 2.50.x quests contain bogus entries in the global bindings table.
12690 // Ignore these. -DD
12691
4/6
✓ Branch 0 taken 386 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 386 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 154 times.
✓ Branch 5 taken 232 times.
386 if(keepdata && id >= 0 && id < NUMSCRIPTGLOBAL)
12692 {
12693 //Disable old '~Continue's, they'd wreak havoc. Bit messy, apologies ~Joe
12694
1/2
✓ Branch 0 taken 232 times.
✗ Branch 1 not taken.
232 if(strcmp(buf,"~Continue") == 0)
12695 {
12696 globalmap[id].scriptname = "";
12697
12698 if(globalscripts[GLOBAL_SCRIPT_ONSAVELOAD] != NULL)
12699 globalscripts[GLOBAL_SCRIPT_ONSAVELOAD]->disable();
12700 }
12701 else
12702 {
12703 232 globalmap[id].scriptname = buf;
12704 }
12705 232 }
12706
12707
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 386 times.
386 delete[] buf;
12708 386 }
12709
12710
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(s_version > 3)
12711 {
12712 word numitembindings;
12713 93 p_igetw(&numitembindings, f, true);
12714
12715
2/2
✓ Branch 0 taken 75 times.
✓ Branch 1 taken 93 times.
168 for(int32_t i=0; i<numitembindings; i++)
12716 {
12717 word id;
12718 75 p_igetw(&id, f, true);
12719 75 p_igetl(&bufsize, f, true);
12720 75 buf = new char[bufsize+1];
12721 75 pfread(buf, bufsize, f, true);
12722 75 buf[bufsize]=0;
12723
12724 //fix this too
12725
2/4
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 75 times.
75 if(keepdata && id <NUMSCRIPTITEM-1)
12726 75 itemmap[id].scriptname = buf;
12727
12728
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 delete[] buf;
12729 75 }
12730 93 }
12731 //(v9+)
12732
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if(s_version > 8)
12733 {
12734 //npc scripts
12735 word numnpcbindings;
12736 20 p_igetw(&numnpcbindings, f, true);
12737
12738
2/2
✓ Branch 0 taken 12 times.
✓ Branch 1 taken 20 times.
32 for(int32_t i=0; i<numnpcbindings; i++)
12739 {
12740 word id;
12741 12 p_igetw(&id, f, true);
12742 12 p_igetl(&bufsize, f, true);
12743 12 buf = new char[bufsize+1];
12744 12 pfread(buf, bufsize, f, true);
12745 12 buf[bufsize]=0;
12746
12747 //fix this too
12748
2/4
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 12 times.
12 if(keepdata && id <NUMSCRIPTGUYS-1)
12749 12 npcmap[id].scriptname = buf;
12750
12751
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 delete[] buf;
12752 12 }
12753 //lweapon
12754 word numlwpnbindings;
12755 20 p_igetw(&numlwpnbindings, f, true);
12756
12757
2/2
✓ Branch 0 taken 42 times.
✓ Branch 1 taken 20 times.
62 for(int32_t i=0; i<numlwpnbindings; i++)
12758 {
12759 word id;
12760 42 p_igetw(&id, f, true);
12761 42 p_igetl(&bufsize, f, true);
12762 42 buf = new char[bufsize+1];
12763 42 pfread(buf, bufsize, f, true);
12764 42 buf[bufsize]=0;
12765
12766 //fix this too
12767
2/4
✓ Branch 0 taken 42 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 42 times.
42 if(keepdata && id <NUMSCRIPTWEAPONS-1)
12768 42 lwpnmap[id].scriptname = buf;
12769
12770
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 42 times.
42 delete[] buf;
12771 42 }
12772 //eweapon
12773 word numewpnbindings;
12774 20 p_igetw(&numewpnbindings, f, true);
12775
12776
2/2
✓ Branch 0 taken 63 times.
✓ Branch 1 taken 20 times.
83 for(int32_t i=0; i<numewpnbindings; i++)
12777 {
12778 word id;
12779 63 p_igetw(&id, f, true);
12780 63 p_igetl(&bufsize, f, true);
12781 63 buf = new char[bufsize+1];
12782 63 pfread(buf, bufsize, f, true);
12783 63 buf[bufsize]=0;
12784
12785 //fix this too
12786
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if(keepdata && id <NUMSCRIPTWEAPONS-1)
12787 63 ewpnmap[id].scriptname = buf;
12788
12789
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 delete[] buf;
12790 63 }
12791 //hero
12792 word numherobindings;
12793 20 p_igetw(&numherobindings, f, true);
12794
12795
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 20 times.
24 for(int32_t i=0; i<numherobindings; i++)
12796 {
12797 word id;
12798 4 p_igetw(&id, f, true);
12799 4 p_igetl(&bufsize, f, true);
12800 4 buf = new char[bufsize+1];
12801 4 pfread(buf, bufsize, f, true);
12802 4 buf[bufsize]=0;
12803
12804 //fix this too
12805
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
4 if(keepdata && id <NUMSCRIPTPLAYER-1)
12806 4 playermap[id].scriptname = buf;
12807
12808
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 delete[] buf;
12809 4 }
12810 //dmaps
12811 word numdmapbindings;
12812 20 p_igetw(&numdmapbindings, f, true);
12813
12814
2/2
✓ Branch 0 taken 14 times.
✓ Branch 1 taken 20 times.
34 for(int32_t i=0; i<numdmapbindings; i++)
12815 {
12816 word id;
12817 14 p_igetw(&id, f, true);
12818 14 p_igetl(&bufsize, f, true);
12819 14 buf = new char[bufsize+1];
12820 14 pfread(buf, bufsize, f, true);
12821 14 buf[bufsize]=0;
12822
12823 //fix this too
12824
2/4
✓ Branch 0 taken 14 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 14 times.
14 if(keepdata && id <NUMSCRIPTSDMAP-1)
12825 14 dmapmap[id].scriptname = buf;
12826
12827
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 14 times.
14 delete[] buf;
12828 14 }
12829 //screen
12830 word numscreenbindings;
12831 20 p_igetw(&numscreenbindings, f, true);
12832
12833
2/2
✓ Branch 0 taken 11 times.
✓ Branch 1 taken 20 times.
31 for(int32_t i=0; i<numscreenbindings; i++)
12834 {
12835 word id;
12836 11 p_igetw(&id, f, true);
12837 11 p_igetl(&bufsize, f, true);
12838 11 buf = new char[bufsize+1];
12839 11 pfread(buf, bufsize, f, true);
12840 11 buf[bufsize]=0;
12841
12842 //fix this too
12843
2/4
✓ Branch 0 taken 11 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 11 times.
11 if(keepdata && id <NUMSCRIPTSDMAP-1)
12844 11 screenmap[id].scriptname = buf;
12845
12846
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 11 times.
11 delete[] buf;
12847 11 }
12848 20 }
12849
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if(s_version > 11)
12850 {
12851 word numspritebindings;
12852 20 p_igetw(&numspritebindings, f, true);
12853
12854
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 20 times.
30 for(int32_t i=0; i<numspritebindings; i++)
12855 {
12856 word id;
12857 10 p_igetw(&id, f, true);
12858 10 p_igetl(&bufsize, f, true);
12859 10 buf = new char[bufsize+1];
12860 10 pfread(buf, bufsize, f, true);
12861 10 buf[bufsize]=0;
12862
12863 //fix this too
12864
2/4
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
10 if(keepdata && id <NUMSCRIPTSDMAP-1)
12865 10 itemspritemap[id].scriptname = buf;
12866
12867
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
10 delete[] buf;
12868 10 }
12869 20 }
12870
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if(s_version >= 15)
12871 {
12872 word numcombobindings;
12873 20 p_igetw(&numcombobindings, f, true);
12874
12875
2/2
✓ Branch 0 taken 24 times.
✓ Branch 1 taken 20 times.
44 for(int32_t i=0; i<numcombobindings; i++)
12876 {
12877 word id;
12878 24 p_igetw(&id, f, true);
12879 24 p_igetl(&bufsize, f, true);
12880 24 buf = new char[bufsize+1];
12881 24 pfread(buf, bufsize, f, true);
12882 24 buf[bufsize]=0;
12883
12884 //fix this too
12885
2/4
✓ Branch 0 taken 24 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 24 times.
24 if(keepdata && id <NUMSCRIPTSCOMBODATA-1)
12886 24 comboscriptmap[id].scriptname = buf;
12887
12888
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 24 times.
24 delete[] buf;
12889 24 }
12890 20 }
12891
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if(s_version > 19)
12892 {
12893 word numgenericbindings;
12894 20 p_igetw(&numgenericbindings, f, true);
12895
12896
2/2
✓ Branch 0 taken 14 times.
✓ Branch 1 taken 20 times.
34 for(int32_t i=0; i<numgenericbindings; i++)
12897 {
12898 word id;
12899 14 p_igetw(&id, f, true);
12900 14 p_igetl(&bufsize, f, true);
12901 14 buf = new char[bufsize+1];
12902 14 pfread(buf, bufsize, f, true);
12903 14 buf[bufsize]=0;
12904
12905 //fix this too
12906
2/4
✓ Branch 0 taken 14 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 14 times.
14 if(keepdata && id <NUMSCRIPTSGENERIC-1)
12907 14 genericmap[id].scriptname = buf;
12908
12909
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 14 times.
14 delete[] buf;
12910 14 }
12911 20 }
12912 93 }
12913
12914 93 return 0;
12915 93 }
12916
12917 93 void reset_scripts()
12918 {
12919 //OK, who spaced this? ;)
12920
2/2
✓ Branch 0 taken 47616 times.
✓ Branch 1 taken 93 times.
47709 for(int32_t i=0; i<NUMSCRIPTFFC; i++)
12921 {
12922
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 47616 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 47616 times.
47616 if(ffscripts[i]!=NULL) delete ffscripts[i];
12923 47616 }
12924
12925
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<NUMSCRIPTITEM; i++)
12926 {
12927
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 23808 times.
23808 if(itemscripts[i]!=NULL) delete itemscripts[i];
12928 23808 }
12929
12930
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<NUMSCRIPTGUYS; i++)
12931 {
12932
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 23808 times.
23808 if(guyscripts[i]!=NULL) delete guyscripts[i];
12933 23808 }
12934
12935
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<NUMSCRIPTWEAPONS; i++)
12936 {
12937
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 23808 times.
23808 if(wpnscripts[i]!=NULL) delete wpnscripts[i];
12938 23808 }
12939
12940
12941
12942
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<NUMSCRIPTSCREEN; i++)
12943 {
12944
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 23808 times.
23808 if(screenscripts[i]!=NULL) delete screenscripts[i];
12945 23808 }
12946
12947
2/2
✓ Branch 0 taken 744 times.
✓ Branch 1 taken 93 times.
837 for(int32_t i=0; i<NUMSCRIPTGLOBAL; i++)
12948 {
12949
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 744 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 744 times.
744 if(globalscripts[i]!=NULL) delete globalscripts[i];
12950 744 }
12951
12952
2/2
✓ Branch 0 taken 465 times.
✓ Branch 1 taken 93 times.
558 for(int32_t i=0; i<NUMSCRIPTPLAYER; i++)
12953 {
12954
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 465 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 465 times.
465 if(playerscripts[i]!=NULL) delete playerscripts[i];
12955 465 }
12956
12957
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<NUMSCRIPTWEAPONS; i++)
12958 {
12959
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 23808 times.
23808 if(lwpnscripts[i]!=NULL) delete lwpnscripts[i];
12960 23808 }
12961
12962
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<NUMSCRIPTWEAPONS; i++)
12963 {
12964
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 23808 times.
23808 if(ewpnscripts[i]!=NULL) delete ewpnscripts[i];
12965 23808 }
12966
12967
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<NUMSCRIPTSDMAP; i++)
12968 {
12969
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 23808 times.
23808 if(dmapscripts[i]!=NULL) delete dmapscripts[i];
12970 23808 }
12971
12972
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<NUMSCRIPTSITEMSPRITE; i++)
12973 {
12974
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 23808 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 23808 times.
23808 if(itemspritescripts[i]!=NULL) delete itemspritescripts[i];
12975 23808 }
12976
12977
2/2
✓ Branch 0 taken 47616 times.
✓ Branch 1 taken 93 times.
47709 for(int32_t i=0; i<NUMSCRIPTSCOMBODATA; i++)
12978 {
12979
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 47616 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 47616 times.
47616 if(comboscripts[i]!=NULL) delete comboscripts[i];
12980 47616 }
12981
12982 93 next_script_data_debug_id = 0;
12983
2/2
✓ Branch 0 taken 47616 times.
✓ Branch 1 taken 93 times.
47709 for(int32_t i=0; i<NUMSCRIPTSGENERIC; i++)
12984 {
12985
3/4
✓ Branch 0 taken 13312 times.
✓ Branch 1 taken 34304 times.
✓ Branch 2 taken 34304 times.
✗ Branch 3 not taken.
47616 if(genericscripts[i]!=NULL) delete genericscripts[i];
12986
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 genericscripts[i] = new script_data();
12987 47616 }
12988
12989
2/2
✓ Branch 0 taken 47616 times.
✓ Branch 1 taken 93 times.
47709 for(int32_t i=0; i<NUMSCRIPTFFC; i++)
12990 {
12991
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 ffscripts[i] = new script_data();
12992 47616 }
12993
12994
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<NUMSCRIPTITEM; i++)
12995 {
12996
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 itemscripts[i] = new script_data();
12997 23808 }
12998
12999
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<NUMSCRIPTGUYS; i++)
13000 {
13001
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 guyscripts[i] = new script_data();
13002 23808 }
13003
13004
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<NUMSCRIPTWEAPONS; i++)
13005 {
13006
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 wpnscripts[i] = new script_data();
13007 23808 }
13008
13009
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<NUMSCRIPTSCREEN; i++)
13010 {
13011
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 screenscripts[i] = new script_data();
13012 23808 }
13013
13014
2/2
✓ Branch 0 taken 744 times.
✓ Branch 1 taken 93 times.
837 for(int32_t i=0; i<NUMSCRIPTGLOBAL; i++)
13015 {
13016
1/2
✓ Branch 0 taken 744 times.
✗ Branch 1 not taken.
744 globalscripts[i] = new script_data();
13017 744 }
13018
13019
2/2
✓ Branch 0 taken 465 times.
✓ Branch 1 taken 93 times.
558 for(int32_t i=0; i<NUMSCRIPTPLAYER; i++)
13020 {
13021
1/2
✓ Branch 0 taken 465 times.
✗ Branch 1 not taken.
465 playerscripts[i] = new script_data();
13022 465 }
13023
13024
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<NUMSCRIPTWEAPONS; i++)
13025 {
13026
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 lwpnscripts[i] = new script_data();
13027 23808 }
13028
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<NUMSCRIPTWEAPONS; i++)
13029 {
13030
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 ewpnscripts[i] = new script_data();
13031 23808 }
13032
13033
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<NUMSCRIPTSDMAP; i++)
13034 {
13035
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 dmapscripts[i] = new script_data();
13036 23808 }
13037
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<NUMSCRIPTSITEMSPRITE; i++)
13038 {
13039
1/2
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
23808 itemspritescripts[i] = new script_data();
13040 23808 }
13041
2/2
✓ Branch 0 taken 47616 times.
✓ Branch 1 taken 93 times.
47709 for(int32_t i=0; i<NUMSCRIPTSCOMBODATA; i++)
13042 {
13043
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 comboscripts[i] = new script_data();
13044 47616 }
13045 93 }
13046
13047 extern script_command command_list[];
13048 184579 int32_t read_one_ffscript(PACKFILE *f, zquestheader *, bool keepdata, int32_t , word s_version, word , script_data **script, word zmeta_version)
13049 {
13050 //Please also update loadquest() when modifying this method -DD
13051 184579 char b33[34] = {0};
13052 184579 b33[33] = 0;
13053 184579 ffscript temp_script;
13054 184579 int32_t num_commands=1000;
13055
13056
1/2
✓ Branch 0 taken 184579 times.
✗ Branch 1 not taken.
184579 if(s_version>=2)
13057 {
13058
2/4
✓ Branch 0 taken 184579 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 184579 times.
✗ Branch 3 not taken.
184579 if(!p_igetl(&num_commands,f,true))
13059 {
13060 return qe_invalid;
13061 }
13062 184579 }
13063
13064
1/2
✓ Branch 0 taken 184579 times.
✗ Branch 1 not taken.
184579 if(keepdata)
13065 {
13066
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 184579 times.
184579 if((*script) != NULL) //Surely we want to do this regardless of keepdata? //No, we don't -V
13067
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 184579 times.
184579 delete (*script);
13068
2/4
✓ Branch 0 taken 184579 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 184579 times.
✗ Branch 3 not taken.
184579 (*script) = new script_data(num_commands);
13069 184579 }
13070
2/2
✓ Branch 0 taken 71940 times.
✓ Branch 1 taken 112639 times.
184579 if(s_version >= 16)
13071 {
13072
1/2
✓ Branch 0 taken 71940 times.
✗ Branch 1 not taken.
71940 zasm_meta temp_meta;
13073
13074
2/4
✓ Branch 0 taken 71940 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 71940 times.
✗ Branch 3 not taken.
71940 if(!p_igetw(&(temp_meta.zasm_v),f,true))
13075 {
13076 return qe_invalid;
13077 }
13078
13079
2/4
✓ Branch 0 taken 71940 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 71940 times.
✗ Branch 3 not taken.
71940 if(!p_igetw(&(temp_meta.meta_v),f,true))
13080 {
13081 return qe_invalid;
13082 }
13083
13084
2/4
✓ Branch 0 taken 71940 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 71940 times.
✗ Branch 3 not taken.
71940 if(!p_igetw(&(temp_meta.ffscript_v),f,true))
13085 {
13086 return qe_invalid;
13087 }
13088
13089
2/4
✓ Branch 0 taken 71940 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 71940 times.
✗ Branch 3 not taken.
71940 if(!p_getc(&(temp_meta.script_type),f,true))
13090 {
13091 return qe_invalid;
13092 }
13093
13094
2/2
✓ Branch 0 taken 575520 times.
✓ Branch 1 taken 71940 times.
647460 for(int32_t q = 0; q < 8; ++q)
13095 {
13096
2/2
✓ Branch 0 taken 172656 times.
✓ Branch 1 taken 402864 times.
575520 if(zmeta_version < 3)
13097 {
13098
2/2
✓ Branch 0 taken 172656 times.
✓ Branch 1 taken 5697648 times.
5870304 for(int32_t c = 0; c < 33; ++c)
13099 {
13100
2/4
✓ Branch 0 taken 5697648 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5697648 times.
✗ Branch 3 not taken.
5697648 if(!p_getc(&(b33[c]),f,true))
13101 {
13102 return qe_invalid;
13103 }
13104 5697648 }
13105
1/2
✓ Branch 0 taken 172656 times.
✗ Branch 1 not taken.
172656 temp_meta.run_idens[q].assign(b33);
13106 172656 }
13107 else
13108 {
13109
2/4
✓ Branch 0 taken 402864 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 402864 times.
✗ Branch 3 not taken.
402864 if(!p_getcstr(&temp_meta.run_idens[q],f,true))
13110 {
13111 return qe_invalid;
13112 }
13113 }
13114 575520 }
13115
13116
2/2
✓ Branch 0 taken 71940 times.
✓ Branch 1 taken 575520 times.
647460 for(int32_t q = 0; q < 8; ++q)
13117 {
13118
2/4
✓ Branch 0 taken 575520 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 575520 times.
✗ Branch 3 not taken.
575520 if(!p_getc(&(temp_meta.run_types[q]),f,true))
13119 {
13120 return qe_invalid;
13121 }
13122 575520 }
13123
13124
2/4
✓ Branch 0 taken 71940 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 71940 times.
✗ Branch 3 not taken.
71940 if(!p_getc(&(temp_meta.flags),f,true))
13125 {
13126 return qe_invalid;
13127 }
13128
13129
2/4
✓ Branch 0 taken 71940 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 71940 times.
✗ Branch 3 not taken.
71940 if(!p_igetw(&(temp_meta.compiler_v1),f,true))
13130 {
13131 return qe_invalid;
13132 }
13133
13134
2/4
✓ Branch 0 taken 71940 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 71940 times.
✗ Branch 3 not taken.
71940 if(!p_igetw(&(temp_meta.compiler_v2),f,true))
13135 {
13136 return qe_invalid;
13137 }
13138
13139
2/4
✓ Branch 0 taken 71940 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 71940 times.
✗ Branch 3 not taken.
71940 if(!p_igetw(&(temp_meta.compiler_v3),f,true))
13140 {
13141 return qe_invalid;
13142 }
13143
13144
2/4
✓ Branch 0 taken 71940 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 71940 times.
✗ Branch 3 not taken.
71940 if(!p_igetw(&(temp_meta.compiler_v4),f,true))
13145 {
13146 return qe_invalid;
13147 }
13148
13149
2/2
✓ Branch 0 taken 21582 times.
✓ Branch 1 taken 50358 times.
71940 if(zmeta_version == 2)
13150 {
13151
2/2
✓ Branch 0 taken 21582 times.
✓ Branch 1 taken 712206 times.
733788 for(int32_t c = 0; c < 33; ++c)
13152 {
13153
2/4
✓ Branch 0 taken 712206 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 712206 times.
✗ Branch 3 not taken.
712206 if(!p_getc(&b33[c],f,true))
13154 {
13155 return qe_invalid;
13156 }
13157 712206 }
13158
1/2
✓ Branch 0 taken 21582 times.
✗ Branch 1 not taken.
21582 temp_meta.script_name.assign(b33);
13159
13160
2/2
✓ Branch 0 taken 21582 times.
✓ Branch 1 taken 712206 times.
733788 for(int32_t c = 0; c < 33; ++c)
13161 {
13162
2/4
✓ Branch 0 taken 712206 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 712206 times.
✗ Branch 3 not taken.
712206 if(!p_getc(&b33[c],f,true))
13163 {
13164 return qe_invalid;
13165 }
13166 712206 }
13167
1/2
✓ Branch 0 taken 21582 times.
✗ Branch 1 not taken.
21582 temp_meta.author.assign(b33);
13168 21582 }
13169
1/2
✓ Branch 0 taken 50358 times.
✗ Branch 1 not taken.
50358 else if(zmeta_version > 2)
13170 {
13171
2/4
✓ Branch 0 taken 50358 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 50358 times.
✗ Branch 3 not taken.
50358 if(!p_getcstr(&temp_meta.script_name,f,true))
13172 return qe_invalid;
13173
2/4
✓ Branch 0 taken 50358 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 50358 times.
✗ Branch 3 not taken.
50358 if(!p_getcstr(&temp_meta.author,f,true))
13174 return qe_invalid;
13175 50358 auto num_meta_attrib = (zmeta_version < 5 ? 4 : 10);
13176
2/2
✓ Branch 0 taken 503580 times.
✓ Branch 1 taken 50358 times.
553938 for(auto q = 0; q < num_meta_attrib; ++q)
13177 {
13178
2/4
✓ Branch 0 taken 503580 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 503580 times.
✗ Branch 3 not taken.
503580 if(!p_getcstr(&temp_meta.attributes[q],f,true))
13179 return qe_invalid;
13180
2/4
✓ Branch 0 taken 503580 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 503580 times.
✗ Branch 3 not taken.
503580 if(!p_getwstr(&temp_meta.attributes_help[q],f,true))
13181 return qe_invalid;
13182 503580 }
13183
2/2
✓ Branch 0 taken 402864 times.
✓ Branch 1 taken 50358 times.
453222 for(auto q = 0; q < 8; ++q)
13184 {
13185
2/4
✓ Branch 0 taken 402864 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 402864 times.
✗ Branch 3 not taken.
402864 if(!p_getcstr(&temp_meta.attribytes[q],f,true))
13186 return qe_invalid;
13187
2/4
✓ Branch 0 taken 402864 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 402864 times.
✗ Branch 3 not taken.
402864 if(!p_getwstr(&temp_meta.attribytes_help[q],f,true))
13188 return qe_invalid;
13189 402864 }
13190
2/2
✓ Branch 0 taken 402864 times.
✓ Branch 1 taken 50358 times.
453222 for(auto q = 0; q < 8; ++q)
13191 {
13192
2/4
✓ Branch 0 taken 402864 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 402864 times.
✗ Branch 3 not taken.
402864 if(!p_getcstr(&temp_meta.attrishorts[q],f,true))
13193 return qe_invalid;
13194
2/4
✓ Branch 0 taken 402864 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 402864 times.
✗ Branch 3 not taken.
402864 if(!p_getwstr(&temp_meta.attrishorts_help[q],f,true))
13195 return qe_invalid;
13196 402864 }
13197
2/2
✓ Branch 0 taken 805728 times.
✓ Branch 1 taken 50358 times.
856086 for(auto q = 0; q < 16; ++q)
13198 {
13199
2/4
✓ Branch 0 taken 805728 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 805728 times.
✗ Branch 3 not taken.
805728 if(!p_getcstr(&temp_meta.usrflags[q],f,true))
13200 return qe_invalid;
13201
2/4
✓ Branch 0 taken 805728 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 805728 times.
✗ Branch 3 not taken.
805728 if(!p_getwstr(&temp_meta.usrflags_help[q],f,true))
13202 return qe_invalid;
13203 805728 }
13204 50358 }
13205
2/2
✓ Branch 0 taken 50358 times.
✓ Branch 1 taken 21582 times.
71940 if(zmeta_version > 3)
13206 {
13207
2/2
✓ Branch 0 taken 402864 times.
✓ Branch 1 taken 50358 times.
453222 for(auto q = 0; q < 8; ++q)
13208 {
13209
2/4
✓ Branch 0 taken 402864 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 402864 times.
✗ Branch 3 not taken.
402864 if(!p_getcstr(&temp_meta.initd[q],f,true))
13210 return qe_invalid;
13211
2/4
✓ Branch 0 taken 402864 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 402864 times.
✗ Branch 3 not taken.
402864 if(!p_getwstr(&temp_meta.initd_help[q],f,true))
13212 return qe_invalid;
13213 402864 }
13214
2/2
✓ Branch 0 taken 402864 times.
✓ Branch 1 taken 50358 times.
453222 for(auto q = 0; q < 8; ++q)
13215 {
13216
2/4
✓ Branch 0 taken 402864 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 402864 times.
✗ Branch 3 not taken.
402864 if(!p_getc(&temp_meta.initd_type[q],f,true))
13217 return qe_invalid;
13218 402864 }
13219 50358 }
13220 else
13221 {
13222
2/2
✓ Branch 0 taken 172656 times.
✓ Branch 1 taken 21582 times.
194238 for(auto q = 0; q < 8; ++q)
13223 {
13224
1/2
✓ Branch 0 taken 172656 times.
✗ Branch 1 not taken.
172656 temp_meta.initd[q] = temp_meta.run_idens[q];
13225 172656 }
13226 }
13227
13228
1/2
✓ Branch 0 taken 71940 times.
✗ Branch 1 not taken.
71940 if(keepdata)
13229
1/2
✓ Branch 0 taken 71940 times.
✗ Branch 1 not taken.
71940 (*script)->meta = temp_meta;
13230
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 71940 times.
71940 }
13231
13232
1/2
✓ Branch 0 taken 184579 times.
✗ Branch 1 not taken.
184579 temp_script.clear();
13233
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 7594317 times.
7594317 for(int32_t j=0; j<num_commands; j++)
13234 {
13235
2/4
✓ Branch 0 taken 7594317 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 7594317 times.
✗ Branch 3 not taken.
7594317 if(!p_igetw(&(temp_script.command),f,true))
13236 {
13237 return qe_invalid;
13238 }
13239
13240
2/2
✓ Branch 0 taken 7409738 times.
✓ Branch 1 taken 184579 times.
7594317 if(temp_script.command == 0xFFFF)
13241 {
13242
1/2
✓ Branch 0 taken 184579 times.
✗ Branch 1 not taken.
184579 if(keepdata)
13243
1/2
✓ Branch 0 taken 184579 times.
✗ Branch 1 not taken.
184579 (*script)->zasm[j].clear();
13244 184579 break;
13245 }
13246 else
13247 {
13248
2/4
✓ Branch 0 taken 7409738 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 7409738 times.
✗ Branch 3 not taken.
7409738 if(!p_igetl(&(temp_script.arg1),f,keepdata))
13249 {
13250 return qe_invalid;
13251 }
13252
13253
2/4
✓ Branch 0 taken 7409738 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 7409738 times.
✗ Branch 3 not taken.
7409738 if(!p_igetl(&(temp_script.arg2),f,keepdata))
13254 {
13255 return qe_invalid;
13256 }
13257
13258
2/2
✓ Branch 0 taken 451721 times.
✓ Branch 1 taken 6958017 times.
7409738 if(s_version >= 21)
13259 {
13260 451721 uint32_t sz = 0;
13261
2/4
✓ Branch 0 taken 451721 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 451721 times.
✗ Branch 3 not taken.
451721 if(!p_igetl(&sz,f,keepdata))
13262 {
13263 return qe_invalid;
13264 }
13265
2/2
✓ Branch 0 taken 1522 times.
✓ Branch 1 taken 450199 times.
451721 if(sz) //string found
13266 {
13267
1/2
✓ Branch 0 taken 1522 times.
✗ Branch 1 not taken.
1522 temp_script.strptr = new std::string();
13268 char dummy;
13269
2/2
✓ Branch 0 taken 115152 times.
✓ Branch 1 taken 1522 times.
116674 for(size_t q = 0; q < sz; ++q)
13270 {
13271
2/4
✓ Branch 0 taken 115152 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 115152 times.
✗ Branch 3 not taken.
115152 if(!p_getc(&dummy,f,keepdata))
13272 {
13273 return qe_invalid;
13274 }
13275
1/2
✓ Branch 0 taken 115152 times.
✗ Branch 1 not taken.
115152 temp_script.strptr->push_back(dummy);
13276 115152 }
13277 1522 }
13278
2/4
✓ Branch 0 taken 451721 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 451721 times.
✗ Branch 3 not taken.
451721 if(!p_igetl(&sz,f,keepdata))
13279 {
13280 return qe_invalid;
13281 }
13282
2/2
✓ Branch 0 taken 90 times.
✓ Branch 1 taken 451631 times.
451721 if(sz) //vector found
13283 {
13284
1/2
✓ Branch 0 taken 90 times.
✗ Branch 1 not taken.
90 temp_script.vecptr = new std::vector<int32_t>();
13285 int32_t dummy;
13286
2/2
✓ Branch 0 taken 1311 times.
✓ Branch 1 taken 90 times.
1401 for(size_t q = 0; q < sz; ++q)
13287 {
13288
2/4
✓ Branch 0 taken 1311 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1311 times.
✗ Branch 3 not taken.
1311 if(!p_igetl(&dummy,f,keepdata))
13289 {
13290 return qe_invalid;
13291 }
13292
1/2
✓ Branch 0 taken 1311 times.
✗ Branch 1 not taken.
1311 temp_script.vecptr->push_back(dummy);
13293 1311 }
13294 90 }
13295 451721 }
13296
13297
1/2
✓ Branch 0 taken 7409738 times.
✗ Branch 1 not taken.
7409738 if(keepdata)
13298 {
13299
1/2
✓ Branch 0 taken 7409738 times.
✗ Branch 1 not taken.
7409738 temp_script.give((*script)->zasm[j]);
13300 7409738 }
13301 }
13302
1/2
✓ Branch 0 taken 7409738 times.
✗ Branch 1 not taken.
7409738 temp_script.clear();
13303 7409738 }
13304
13305 184579 return 0;
13306 184579 }
13307
13308 extern SAMPLE customsfxdata[WAV_COUNT];
13309 extern uint8_t customsfxflag[WAV_COUNT>>3];
13310 extern int32_t sfxdat;
13311 extern DATAFILE *sfxdata;
13312 const char *old_sfx_string[Z35] =
13313 {
13314 "Arrow", "Sword beam", "Bomb blast", "Boomerang", "Subscreen cursor",
13315 "Shield is hit", "Item chime", "Roar (Dodongo, Gohma)", "Shutter", "Enemy dies",
13316 "Enemy is hit", "Low hearts warning", "Fire", "Ganon's fanfare", "Boss is hit", "Hammer",
13317 "Hookshot", "Message", "Player is hit", "Item fanfare", "Bomb placed", "Item pickup",
13318 "Refill", "Roar (Aquamentus, Gleeok, Ganon)", "Item pickup 2", "Ocean ambience",
13319 "Secret chime", "Player dies", "Stairs", "Sword", "Roar (Manhandla, Digdogger, Patra)",
13320 "Wand magic", "Whistle", "Zelda's fanfare", "Charging weapon", "Charging weapon 2",
13321 "Din's Fire", "Enemy falls from ceiling", "Farore's Wind", "Fireball", "Tall Grass slashed",
13322 "Pound pounded", "Hover Boots", "Ice magic", "Jump", "Lens of Truth off", "Lens of Truth on",
13323 "Nayru's Love shield", "Nayru's Love shield 2", "Push block", "Rock", "Spell rocket down",
13324 "Spell rocket up", "Sword spin attack", "Splash", "Summon magic", "Sword tapping",
13325 "Sword tapping (secret)", "Whistle whirlwind", "Cane of Byrna orbit"
13326 };
13327 char *sfx_string[WAV_COUNT];
13328
13329 93 int32_t readsfx(PACKFILE *f, zquestheader *Header, bool keepdata)
13330 {
13331 //these are here to bypass compiler warnings about unused arguments
13332 93 Header=Header;
13333
13334 int32_t dummy;
13335 93 word s_version=0, s_cversion=0;
13336 //int32_t ret;
13337 SAMPLE temp_sample;
13338 93 temp_sample.loop_start=0;
13339 93 temp_sample.loop_end=0;
13340 93 temp_sample.param=0;
13341
13342 //section version info
13343
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(!p_igetw(&s_version,f,true))
13344 {
13345 return qe_invalid;
13346 }
13347
13348 93 FFCore.quest_format[vSFX] = s_version;
13349
13350 //al_trace("SFX version %d\n", s_version);
13351
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_cversion,f,true))
13352 {
13353 return qe_invalid;
13354 }
13355
13356 //section size
13357
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&dummy,f,true))
13358 {
13359 return qe_invalid;
13360 }
13361
13362 /* HIGHLY UNORTHODOX UPDATING THING, by L
13363 * This fixes quests made before revision 411 (such as the 'Lost Isle Build'),
13364 * where the meaning of GOTOLESS changed. It also coincided with V_SFX
13365 * changing from 1 to 2.
13366 */
13367
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
93 if(s_version < 2 && keepdata)
13368 set_bit(quest_rules,qr_GOTOLESSNOTEQUAL,1);
13369
13370 /* End highly unorthodox updating thing */
13371
13372 93 int32_t wavcount = WAV_COUNT;
13373
13374
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version < 6)
13375 wavcount = 128;
13376
13377 uint8_t tempflag[WAV_COUNT>>3];
13378
13379
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(s_version < 4)
13380 {
13381 memset(tempflag, 0xFF, WAV_COUNT>>3);
13382 }
13383 else
13384 {
13385
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version < 6)
13386 memset(tempflag, 0, WAV_COUNT>>3);
13387
13388
2/2
✓ Branch 0 taken 2976 times.
✓ Branch 1 taken 93 times.
3069 for(int32_t i=0; i<(wavcount>>3); i++)
13389 {
13390 2976 p_getc(&tempflag[i], f, true);
13391 2976 }
13392
13393 }
13394
13395
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version>4)
13396 {
13397
2/2
✓ Branch 0 taken 23715 times.
✓ Branch 1 taken 93 times.
23808 for(int32_t i=1; i<WAV_COUNT; i++)
13398 {
13399
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23715 times.
23715 if(keepdata)
13400 {
13401 23715 sprintf(sfx_string[i],"s%03d",i);
13402
13403
2/2
✓ Branch 0 taken 18135 times.
✓ Branch 1 taken 5580 times.
23715 if((i<Z35))
13404 5580 strcpy(sfx_string[i], old_sfx_string[i-1]);
13405 23715 }
13406
13407
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23715 times.
23715 if(i>=wavcount)
13408 continue;
13409
2/2
✓ Branch 0 taken 1682 times.
✓ Branch 1 taken 22033 times.
23715 if(get_bit(tempflag, i-1))
13410 {
13411 char tempname[36];
13412
13413
1/2
✓ Branch 0 taken 1682 times.
✗ Branch 1 not taken.
1682 if(!pfread(tempname, 36, f, keepdata))
13414 {
13415 return qe_invalid;
13416 }
13417
13418
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1682 times.
1682 if(keepdata)
13419 {
13420 1682 strcpy(sfx_string[i], tempname);
13421 1682 sfx_string[i][35] = 0; //Force NULL Termination
13422 1682 }
13423 1682 }
13424
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 22033 times.
22033 else if(keepdata)
13425 {
13426 22033 sprintf(sfx_string[i],"s%03d",i);
13427
13428
2/2
✓ Branch 0 taken 17670 times.
✓ Branch 1 taken 4363 times.
22033 if(i<Z35)
13429 4363 strcpy(sfx_string[i], old_sfx_string[i-1]);
13430 22033 sfx_string[i][35] = 0; //Force NULL Termination
13431 22033 }
13432 23715 }
13433 93 }
13434 else
13435 {
13436 if(keepdata)
13437 {
13438 for(int32_t i=1; i<WAV_COUNT; i++)
13439 {
13440 sprintf(sfx_string[i],"s%03d",i);
13441
13442 if(i<Z35)
13443 strcpy(sfx_string[i], old_sfx_string[i-1]);
13444 }
13445 }
13446 }
13447
13448 //finally... section data
13449
2/2
✓ Branch 0 taken 23715 times.
✓ Branch 1 taken 93 times.
23808 for(int32_t i=1; i<wavcount; i++)
13450 {
13451
2/2
✓ Branch 0 taken 1682 times.
✓ Branch 1 taken 22033 times.
23715 if(get_bit(tempflag, i-1))
13452 {
13453
13454
1/2
✓ Branch 0 taken 1682 times.
✗ Branch 1 not taken.
1682 if(!p_igetl(&dummy,f,true))
13455 {
13456 return qe_invalid;
13457 }
13458
13459 1682 (temp_sample.bits) = dummy;
13460
13461
1/2
✓ Branch 0 taken 1682 times.
✗ Branch 1 not taken.
1682 if(!p_igetl(&dummy,f,true))
13462 {
13463 return qe_invalid;
13464 }
13465
13466 1682 (temp_sample.stereo) = dummy;
13467
13468
1/2
✓ Branch 0 taken 1682 times.
✗ Branch 1 not taken.
1682 if(!p_igetl(&dummy,f,keepdata))
13469 {
13470 return qe_invalid;
13471 }
13472
13473 1682 (temp_sample.freq) = dummy;
13474
13475
1/2
✓ Branch 0 taken 1682 times.
✗ Branch 1 not taken.
1682 if(!p_igetl(&dummy,f,keepdata))
13476 {
13477 return qe_invalid;
13478 }
13479
13480 1682 (temp_sample.priority) = dummy;
13481
13482
1/2
✓ Branch 0 taken 1682 times.
✗ Branch 1 not taken.
1682 if(!p_igetl(&(temp_sample.len),f,true))
13483 {
13484 return qe_invalid;
13485 }
13486
13487
1/2
✓ Branch 0 taken 1682 times.
✗ Branch 1 not taken.
1682 if(!p_igetl(&(temp_sample.loop_start),f,keepdata))
13488 {
13489 return qe_invalid;
13490 }
13491
13492
1/2
✓ Branch 0 taken 1682 times.
✗ Branch 1 not taken.
1682 if(!p_igetl(&(temp_sample.loop_end),f,keepdata))
13493 {
13494 return qe_invalid;
13495 }
13496
13497
1/2
✓ Branch 0 taken 1682 times.
✗ Branch 1 not taken.
1682 if(!p_igetl(&(temp_sample.param),f,keepdata))
13498 {
13499 return qe_invalid;
13500 }
13501
13502 // al_trace("F%i: L%i\n",i,temp_sample.len);
13503 // temp_sample.data = new byte[(temp_sample.bits==8?1:2)*temp_sample.len];
13504 1682 int32_t len = (temp_sample.bits==8?1:2)*(temp_sample.stereo==0?1:2)*temp_sample.len;
13505 1682 temp_sample.data = calloc(len,1);
13506
13507
1/2
✓ Branch 0 taken 1682 times.
✗ Branch 1 not taken.
1682 if(s_version < 3)
13508 len = (temp_sample.bits==8?1:2)*temp_sample.len;
13509
13510 //old-style, non-portable loading (Bad Allegro! Bad!!) -DD
13511
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1682 times.
1682 if(s_version < 2)
13512 {
13513 if(!pfread(temp_sample.data, len,f,keepdata))
13514 {
13515 return qe_invalid;
13516 }
13517 }
13518 else
13519 {
13520 //re-endianfy the data
13521 1682 int32_t wordstoread = len / sizeof(word);
13522
13523
2/2
✓ Branch 0 taken 47024293 times.
✓ Branch 1 taken 1682 times.
47025975 for(int32_t j=0; j<wordstoread; j++)
13524 {
13525 word temp;
13526
13527
1/2
✓ Branch 0 taken 47024293 times.
✗ Branch 1 not taken.
47024293 if(!p_igetw(&temp, f, keepdata))
13528 {
13529 return qe_invalid;
13530 }
13531
13532
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 47024293 times.
47024293 if(keepdata)
13533 47024293 ((word *)temp_sample.data)[j] = temp;
13534 47024293 }
13535 }
13536 1682 }
13537
2/2
✓ Branch 0 taken 4363 times.
✓ Branch 1 taken 17670 times.
22033 else if(i < Z35)
13538 {
13539 4363 SAMPLE* datsamp = (SAMPLE*)(sfxdata[i].dat);
13540 4363 memcpy(&temp_sample, datsamp, sizeof(SAMPLE));
13541 4363 set_bit(tempflag, i-1, 1);
13542 4363 int32_t len = (temp_sample.bits==8?1:2)*(temp_sample.stereo==0?1:2)*temp_sample.len;
13543 4363 temp_sample.data = calloc(len,1);
13544 4363 memcpy(temp_sample.data, datsamp->data, len);
13545 4363 }
13546 17670 else continue;
13547
13548
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 6045 times.
6045 if(keepdata)
13549 {
13550
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 6045 times.
6045 if(customsfxdata[i].data!=NULL)
13551 {
13552 // delete [] customsfxdata[i].data;
13553 6045 free(customsfxdata[i].data);
13554 6045 }
13555
13556 // customsfxdata[i].data = new byte[(temp_sample.bits==8?1:2)*temp_sample.len];
13557 6045 int32_t len2 = (temp_sample.bits==8?1:2)*(temp_sample.stereo==0?1:2)*temp_sample.len;
13558 6045 customsfxdata[i].data = calloc(len2,1);
13559 6045 customsfxdata[i].bits = temp_sample.bits;
13560 6045 customsfxdata[i].stereo = temp_sample.stereo;
13561 6045 customsfxdata[i].freq = temp_sample.freq;
13562 6045 customsfxdata[i].priority = temp_sample.priority;
13563 6045 customsfxdata[i].len = temp_sample.len;
13564 6045 customsfxdata[i].loop_start = temp_sample.loop_start;
13565 6045 customsfxdata[i].loop_end = temp_sample.loop_end;
13566 6045 customsfxdata[i].param = temp_sample.param;
13567 6045 int32_t cpylen = len2;
13568
13569
1/2
✓ Branch 0 taken 6045 times.
✗ Branch 1 not taken.
6045 if(s_version<3)
13570 {
13571 cpylen = (temp_sample.bits==8?1:2)*temp_sample.len;
13572 al_trace("WARNING: Quest SFX %d is in stereo, and may be corrupt.\n",i);
13573 }
13574
13575 6045 memcpy(customsfxdata[i].data,temp_sample.data,cpylen);
13576 6045 }
13577
13578 6045 free(temp_sample.data);
13579 6045 }
13580
13581
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata)
13582 93 memcpy(customsfxflag, tempflag, WAV_COUNT>>3);
13583
13584 93 sfxdat=0;
13585 93 return 0;
13586 93 }
13587
13588 93 void setupsfx()
13589 {
13590
2/2
✓ Branch 0 taken 23715 times.
✓ Branch 1 taken 93 times.
23808 for(int32_t i=1; i<WAV_COUNT; i++)
13591 {
13592 23715 sprintf(sfx_string[i],"s%03d",i);
13593
13594
2/2
✓ Branch 0 taken 18135 times.
✓ Branch 1 taken 5580 times.
23715 if(i<Z35)
13595 {
13596 5580 strcpy(sfx_string[i], old_sfx_string[i-1]);
13597 5580 }
13598
13599 23715 memset(customsfxflag, 0, WAV_COUNT>>3);
13600
13601 23715 int32_t j=i;
13602
13603
2/2
✓ Branch 0 taken 5673 times.
✓ Branch 1 taken 18042 times.
23715 if(i>Z35)
13604 {
13605 18042 i=Z35;
13606 18042 }
13607
13608 23715 SAMPLE *temp_sample = (SAMPLE *)sfxdata[i].dat;
13609
13610
2/2
✓ Branch 0 taken 6630 times.
✓ Branch 1 taken 17085 times.
23715 if(customsfxdata[j].data!=NULL)
13611 {
13612 // delete [] customsfxdata[j].data;
13613 17085 free(customsfxdata[j].data);
13614 17085 }
13615
13616 // customsfxdata[j].data = new byte[(temp_sample->bits==8?1:2)*temp_sample->len];
13617 23715 customsfxdata[j].data = calloc((temp_sample->bits==8?1:2)*(temp_sample->stereo == 0 ? 1 : 2)*temp_sample->len,1);
13618 23715 customsfxdata[j].bits = temp_sample->bits;
13619 23715 customsfxdata[j].stereo = temp_sample->stereo;
13620 23715 customsfxdata[j].freq = temp_sample->freq;
13621 23715 customsfxdata[j].priority = temp_sample->priority;
13622 23715 customsfxdata[j].len = temp_sample->len;
13623 23715 customsfxdata[j].loop_start = temp_sample->loop_start;
13624 23715 customsfxdata[j].loop_end = temp_sample->loop_end;
13625 23715 customsfxdata[j].param = temp_sample->param;
13626 23715 memcpy(customsfxdata[j].data, (temp_sample->data), (temp_sample->bits==8?1:2)*(temp_sample->stereo==0 ? 1 : 2)*temp_sample->len);
13627 23715 i=j;
13628 23715 }
13629 93 }
13630
13631 extern char *guy_string[eMAXGUYS];
13632 extern const char *old_guy_string[OLDMAXGUYS];
13633
13634 93 int32_t readguys(PACKFILE *f, zquestheader *Header, bool keepdata)
13635 {
13636 dword dummy;
13637 word guy_cversion;
13638 93 word guyversion=0;
13639
13640
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(Header->zelda_version >= 0x193)
13641 {
13642 //section version info
13643
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&guyversion,f,true))
13644 {
13645 return qe_invalid;
13646 }
13647
13648 93 FFCore.quest_format[vGuys] = guyversion;
13649
13650 //al_trace("Guys version %d\n", guyversion);
13651
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&guy_cversion,f,true))
13652 {
13653 return qe_invalid;
13654 }
13655 93 al_trace("Guy CVersion is: %d\n", guy_cversion);
13656 //section size
13657
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&dummy,f,true))
13658 {
13659 return qe_invalid;
13660 }
13661 93 }
13662
13663
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(guyversion > 3)
13664 {
13665
2/2
✓ Branch 0 taken 47616 times.
✓ Branch 1 taken 93 times.
47709 for(int32_t i=0; i<MAXGUYS; i++)
13666 {
13667 char tempname[64];
13668
13669 // rev. 1511 : guyversion = 23. upped to 512 editable enemies. -Gleeok
13670 // if guyversion < 23 then there is only 256 enemies in the packfile, so default the rest.
13671
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 47616 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
47616 if(guyversion < 23 && i >= OLDBETAMAXGUYS && keepdata)
13672 {
13673 memset(tempname, 0, sizeof(char)*64);
13674 sprintf(tempname, "e%03d", i);
13675 strcpy(guy_string[i], tempname);
13676
13677 continue;
13678 }
13679
13680
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!pfread(tempname, 64, f, keepdata))
13681 {
13682 return qe_invalid;
13683 }
13684
13685 // Don't retain names of uneditable enemy entries!
13686
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 47616 times.
47616 if(keepdata)
13687 {
13688 // for version upgrade to 2.5
13689
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 47616 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
47616 if(guyversion < 23 && i >= 177)
13690 {
13691 // some of the older builds have names such as 'zz123',
13692 // (this order gets messed up with some eXXX and some zzXXX)
13693 // so let's update to the newer naming convection. -Gleeok
13694 char tmpbuf[64];
13695 memset(tmpbuf, 0, sizeof(char)*64);
13696 sprintf(tmpbuf, "zz%03d", i);
13697
13698 if(memcmp(tempname, tmpbuf, size_t(5)) == 0)
13699 {
13700 memset(tempname, 0, sizeof(char)*64);
13701 sprintf(tempname, "e%03d", i);
13702 }
13703 }
13704
13705
6/6
✓ Branch 0 taken 16461 times.
✓ Branch 1 taken 31155 times.
✓ Branch 2 taken 15624 times.
✓ Branch 3 taken 837 times.
✓ Branch 4 taken 12823 times.
✓ Branch 5 taken 2801 times.
47616 if(i >= OLDMAXGUYS || strlen(tempname)<1 || tempname[strlen(tempname)-1]!=' ')
13706 {
13707 44815 strcpy(guy_string[i], tempname);
13708 44815 }
13709 else
13710 {
13711 2801 strcpy(guy_string[i],old_guy_string[i]);
13712 }
13713 47616 }
13714 47616 }
13715 93 }
13716 else
13717 {
13718 if(keepdata)
13719 {
13720 for(int32_t i=0; i<eMAXGUYS; i++)
13721 {
13722 sprintf(guy_string[i],"zz%03d",i);
13723 }
13724
13725 for(int32_t i=0; i<OLDMAXGUYS; i++)
13726 {
13727 strcpy(guy_string[i],old_guy_string[i]);
13728 }
13729 }
13730 }
13731
13732
13733 //finally... section data
13734
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata)
13735 {
13736 93 init_guys(guyversion); //using default data for now...
13737
13738 // Goriya guy fix
13739
2/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if((Header->zelda_version < 0x211)||((Header->zelda_version == 0x211)&&(Header->build<7)))
13740 {
13741 if(get_bit(quest_rules,qr_NEWENEMYTILES))
13742 {
13743 guysbuf[gGORIYA].tile=130;
13744 guysbuf[gGORIYA].e_tile=130;
13745 }
13746 }
13747 93 }
13748
13749
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(Header->zelda_version < 0x193)
13750 {
13751 if(get_bit(deprecated_rules,46))
13752 {
13753 guysbuf[eDODONGO].cset=14;
13754 guysbuf[eDODONGO].bosspal=spDIG;
13755 }
13756 }
13757 // Not sure when this first changed, but it's necessary for 2.10, at least
13758 // @TODO: @BUG:1.92 - 1.84? Figure this out exactly for the final 2.50 release.
13759 //2.10 Fixes
13760
2/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if((Header->zelda_version < 0x211)||((Header->zelda_version == 0x211)&&(Header->build<18)))
13761 {
13762 guysbuf[eWWIZ].editorflags |= ENEMY_FLAG5;
13763 guysbuf[eMOLDORM].editorflags |= ENEMY_FLAG6;
13764 guysbuf[eMANHAN].editorflags |= ENEMY_FLAG6;
13765 guysbuf[eCENT1].misc3 = 1;
13766 guysbuf[eCENT2].misc3 = 1;
13767 }
13768
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if((Header->zelda_version <= 0x255) || (Header->zelda_version == 0x255 && Header->build < 47) )
13769 {
13770 93 guysbuf[eWPOLSV].defense[edefWhistle] = ed1HKO;
13771 93 }
13772
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(Header->zelda_version <= 0x210)
13773 {
13774 guysbuf[eGLEEOK1F].misc6 = 16;
13775 guysbuf[eGLEEOK2F].misc6 = 16;
13776 guysbuf[eGLEEOK3F].misc6 = 16;
13777 guysbuf[eGLEEOK4F].misc6 = 16;
13778
13779 guysbuf[eWIZ1].misc4 = 1; //only set the enemy that needs backward compat, not all of them.
13780 guysbuf[eBATROBE].misc4 = 1;
13781 //guysbuf[eSUMMONER].misc4 = 1;
13782 guysbuf[eWWIZ].misc4 = 1;
13783 guysbuf[eDODONGO].deadsfx = 15; //In 2.10 and earlier, Dodongos used this as their death sound.
13784 guysbuf[eDODONGOBS].deadsfx = 15; //In 2.10 and earlier, Dodongos used this as their death sound.
13785 }
13786
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(Header->zelda_version == 0x190)
13787 {
13788 al_trace("Setting Tribble Properties for Version: %x", Header->zelda_version);
13789 guysbuf[eKEESETRIB].misc3 = eVIRE; //1.90 and earlier, keese and gel tribbles grew up into
13790 guysbuf[eGELTRIB].misc3 = eZOL; //normal vires, and zols -Z (16th January, 2019 )
13791 }
13792
13793 // The versions here may not be correct
13794 // zelda_version>=0x211 handled at guyversion<24
13795
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(Header->zelda_version <= 0x190)
13796 {
13797 guysbuf[eCENT1].misc3 = 0;
13798 guysbuf[eCENT2].misc3 = 0;
13799 guysbuf[eMOLDORM].misc2 = 0;
13800 //guysbuf[eKEESETRIB].misc3 = eVIRE; //1.90 and earlier, keese and gel tribbles grew up into
13801 //guysbuf[eGELTRIB].misc3 = eZOL; //normal vires, and zols -Z (16th January, 2019 )
13802 }
13803
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 else if(Header->zelda_version <= 0x210)
13804 {
13805 guysbuf[eCENT1].misc3 = 1;
13806 guysbuf[eCENT2].misc3 = 1;
13807 guysbuf[eMOLDORM].misc2 = 0;
13808 }
13809
13810
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if ( Header->zelda_version < 0x211 ) //Default rest rates for phantom ghinis, peahats and keese in < 2.50 quests
13811 {
13812 guysbuf[eKEESE1].misc16 = 120;
13813 guysbuf[eKEESE2].misc16 = 120;
13814 guysbuf[eKEESE3].misc16 = 120;
13815 guysbuf[eKEESETRIB].misc16 = 120;
13816 guysbuf[eKEESE1].misc17 = 16;
13817 guysbuf[eKEESE2].misc17 = 16;
13818 guysbuf[eKEESE3].misc17 = 16;
13819 guysbuf[eKEESETRIB].misc17 = 16;
13820
13821 guysbuf[ePEAHAT].misc16 = 80;
13822 guysbuf[ePEAHAT].misc17 = 16;
13823
13824 guysbuf[eGHINI2].misc16 = 120;
13825 guysbuf[eGHINI2].misc17 = 10;
13826
13827 }
13828
13829
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(guyversion<=2)
13830 {
13831 return readherosprites2(f, guyversion==2?0:-1, 0, keepdata);
13832 }
13833
13834
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(guyversion > 3)
13835 {
13836 guydata tempguy;
13837
13838
2/2
✓ Branch 0 taken 47616 times.
✓ Branch 1 taken 93 times.
47709 for(int32_t i=0; i<MAXGUYS; i++)
13839 {
13840
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 47616 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
47616 if(guyversion < 23 && keepdata) // May 2012 : 512 max enemies
13841 {
13842 if(i >= OLDBETAMAXGUYS)
13843 {
13844 memset(&guysbuf[i], 0, sizeof(guydata));
13845 continue;
13846 }
13847 }
13848
13849 47616 memset(&tempguy, 0, sizeof(guydata));
13850
13851
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetl(&(tempguy.flags),f,keepdata))
13852 {
13853 return qe_invalid;
13854 }
13855
13856
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetl(&(tempguy.flags2),f,keepdata))
13857 {
13858 return qe_invalid;
13859 }
13860
13861
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if ( guyversion >= 36 ) //expanded tiles
13862 {
13863
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.tile),f,keepdata))
13864 {
13865 return qe_invalid;
13866 }
13867 10240 }
13868 else
13869 {
13870
1/2
✓ Branch 0 taken 37376 times.
✗ Branch 1 not taken.
37376 if(!p_igetw(&(tempguy.tile),f,keepdata))
13871 {
13872 return qe_invalid;
13873 }
13874 }
13875
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&(tempguy.width),f,keepdata))
13876 {
13877 return qe_invalid;
13878 }
13879
13880
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&(tempguy.height),f,keepdata))
13881 {
13882 return qe_invalid;
13883 }
13884
13885
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if ( guyversion >= 36 ) //expanded tiles
13886 {
13887
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.s_tile),f,keepdata))
13888 {
13889 return qe_invalid;
13890 }
13891 10240 }
13892 else
13893 {
13894
1/2
✓ Branch 0 taken 37376 times.
✗ Branch 1 not taken.
37376 if(!p_igetw(&(tempguy.s_tile),f,keepdata))
13895 {
13896 return qe_invalid;
13897 }
13898 }
13899
13900
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&(tempguy.s_width),f,keepdata))
13901 {
13902 return qe_invalid;
13903 }
13904
13905
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&(tempguy.s_height),f,keepdata))
13906 {
13907 return qe_invalid;
13908 }
13909
13910
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if ( guyversion >= 36 ) //expanded tiles
13911 {
13912
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.e_tile),f,keepdata))
13913 {
13914 return qe_invalid;
13915 }
13916 10240 }
13917 else
13918 {
13919
1/2
✓ Branch 0 taken 37376 times.
✗ Branch 1 not taken.
37376 if(!p_igetw(&(tempguy.e_tile),f,keepdata))
13920 {
13921 return qe_invalid;
13922 }
13923 }
13924
13925
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&(tempguy.e_width),f,keepdata))
13926 {
13927 return qe_invalid;
13928 }
13929
13930
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&(tempguy.e_height),f,keepdata))
13931 {
13932 return qe_invalid;
13933 }
13934
13935
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.hp),f,keepdata))
13936 {
13937 return qe_invalid;
13938 }
13939
13940
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.family),f,keepdata))
13941 {
13942 return qe_invalid;
13943 }
13944
13945
1/12
✗ Branch 0 not taken.
✓ Branch 1 taken 47616 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
47616 if(guyversion < 9 && (i==eDKNUT1 || i==eDKNUT2 || i==eDKNUT3 || i==eDKNUT4 || i==eDKNUT5)) // Whoops, forgot about Darknuts...
13946 {
13947 if(get_bit(quest_rules,qr_NEWENEMYTILES))
13948 {
13949 tempguy.s_tile=tempguy.e_tile+120;
13950 tempguy.s_width=tempguy.e_width;
13951 tempguy.s_height=tempguy.e_height;
13952 }
13953 else tempguy.s_tile=860;
13954 }
13955
13956
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.cset),f,keepdata))
13957 {
13958 return qe_invalid;
13959 }
13960
13961
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.anim),f,keepdata))
13962 {
13963 return qe_invalid;
13964 }
13965
13966
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.e_anim),f,keepdata))
13967 {
13968 return qe_invalid;
13969 }
13970
13971
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.frate),f,keepdata))
13972 {
13973 return qe_invalid;
13974 }
13975
13976
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.e_frate),f,keepdata))
13977 {
13978 return qe_invalid;
13979 }
13980
13981
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(guyversion < 13) // April 2009
13982 {
13983 if(get_bit(deprecated_rules, qr_SLOWENEMYANIM_DEP))
13984 {
13985 tempguy.frate *= 2;
13986 tempguy.e_frate *= 2;
13987 }
13988 }
13989
13990
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(guyversion < 14) // May 1 2009
13991 {
13992 if(tempguy.anim==a2FRMSLOW)
13993 {
13994 tempguy.anim=a2FRM;
13995 tempguy.frate *= 2;
13996 }
13997
13998 if(tempguy.e_anim==a2FRMSLOW)
13999 {
14000 tempguy.e_anim=a2FRM;
14001 tempguy.e_frate *= 2;
14002 }
14003
14004 if(tempguy.anim==aFLIPSLOW)
14005 {
14006 tempguy.anim=aFLIP;
14007 tempguy.frate *= 2;
14008 }
14009
14010 if(tempguy.e_anim==aFLIPSLOW)
14011 {
14012 tempguy.e_anim=aFLIP;
14013 tempguy.e_frate *= 2;
14014 }
14015
14016 if(tempguy.anim == aNEWDWALK) tempguy.anim = a4FRM4DIR;
14017
14018 if(tempguy.e_anim == aNEWDWALK) tempguy.e_anim = a4FRM4DIR;
14019
14020 if(tempguy.anim == aNEWPOLV || tempguy.anim == a4FRM3TRAP)
14021 {
14022 tempguy.anim=a4FRM4DIR;
14023 tempguy.s_tile=(get_bit(quest_rules,qr_NEWENEMYTILES) ? tempguy.e_tile : tempguy.tile)+20;
14024 }
14025
14026 if(tempguy.e_anim == aNEWPOLV || tempguy.e_anim == a4FRM3TRAP)
14027 {
14028 tempguy.e_anim=a4FRM4DIR;
14029 tempguy.s_tile=(get_bit(quest_rules,qr_NEWENEMYTILES) ? tempguy.e_tile : tempguy.tile)+20;
14030 }
14031 }
14032
14033
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.dp),f,keepdata))
14034 {
14035 return qe_invalid;
14036 }
14037
14038 //correction for guy fire
14039
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(guyversion < 6)
14040 {
14041 if(i == gFIRE)
14042 tempguy.dp = 2;
14043 }
14044
14045
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.wdp),f,keepdata))
14046 {
14047 return qe_invalid;
14048 }
14049
14050
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.weapon),f,keepdata))
14051 {
14052 return qe_invalid;
14053 }
14054
14055 //correction for bosses using triple, "rising" fireballs
14056
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(guyversion < 5)
14057 {
14058 if(i == eLAQUAM || i == eRAQUAM || i == eGOHMA1 || i == eGOHMA2 ||
14059 i == eGOHMA3 || i == eGOHMA4)
14060 {
14061 if(tempguy.weapon == ewFireball)
14062 tempguy.weapon = ewFireball2;
14063 }
14064 }
14065
14066
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.rate),f,keepdata))
14067 {
14068 return qe_invalid;
14069 }
14070
14071
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.hrate),f,keepdata))
14072 {
14073 return qe_invalid;
14074 }
14075
14076
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.step),f,keepdata))
14077 {
14078 return qe_invalid;
14079 }
14080
14081 // HIGHLY UNORTHODOX UPDATING THING, part 2
14082
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 47616 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
47616 if(fixpolsvoice && tempguy.family==eePOLSV)
14083 {
14084 tempguy.step /= 2;
14085 }
14086
14087
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.homing),f,keepdata))
14088 {
14089 return qe_invalid;
14090 }
14091
14092
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.grumble),f,keepdata))
14093 {
14094 return qe_invalid;
14095 }
14096
14097
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.item_set),f,keepdata))
14098 {
14099 return qe_invalid;
14100 }
14101
14102
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(guyversion>=22) // Version 22: Expand misc attributes to 32 bits
14103 {
14104
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetl(&(tempguy.misc1),f,keepdata))
14105 {
14106 return qe_invalid;
14107 }
14108
14109
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetl(&(tempguy.misc2),f,keepdata))
14110 {
14111 return qe_invalid;
14112 }
14113
14114
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetl(&(tempguy.misc3),f,keepdata))
14115 {
14116 return qe_invalid;
14117 }
14118
14119
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetl(&(tempguy.misc4),f,keepdata))
14120 {
14121 return qe_invalid;
14122 }
14123
14124
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetl(&(tempguy.misc5),f,keepdata))
14125 {
14126 return qe_invalid;
14127 }
14128
14129
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetl(&(tempguy.misc6),f,keepdata))
14130 {
14131 return qe_invalid;
14132 }
14133
14134
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetl(&(tempguy.misc7),f,keepdata))
14135 {
14136 return qe_invalid;
14137 }
14138
14139
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetl(&(tempguy.misc8),f,keepdata))
14140 {
14141 return qe_invalid;
14142 }
14143
14144
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetl(&(tempguy.misc9),f,keepdata))
14145 {
14146 return qe_invalid;
14147 }
14148
14149
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetl(&(tempguy.misc10),f,keepdata))
14150 {
14151 return qe_invalid;
14152 }
14153 47616 }
14154 else
14155 {
14156 int16_t tempMisc;
14157
14158 if(!p_igetw(&tempMisc,f,keepdata))
14159 {
14160 return qe_invalid;
14161 }
14162
14163 tempguy.misc1=tempMisc;
14164
14165 if(!p_igetw(&tempMisc,f,keepdata))
14166 {
14167 return qe_invalid;
14168 }
14169
14170 tempguy.misc2=tempMisc;
14171
14172 if(!p_igetw(&tempMisc,f,keepdata))
14173 {
14174 return qe_invalid;
14175 }
14176
14177 tempguy.misc3=tempMisc;
14178
14179 if(!p_igetw(&tempMisc,f,keepdata))
14180 {
14181 return qe_invalid;
14182 }
14183
14184 tempguy.misc4=tempMisc;
14185
14186 if(!p_igetw(&tempMisc,f,keepdata))
14187 {
14188 return qe_invalid;
14189 }
14190
14191 tempguy.misc5=tempMisc;
14192
14193 if(guyversion < 13) // April 2009 - a tiny Wizzrobe update
14194 {
14195 if(tempguy.family == eeWIZZ && !(tempguy.misc1))
14196 tempguy.misc5 = 74;
14197 }
14198
14199 if(!p_igetw(&tempMisc,f,keepdata))
14200 {
14201 return qe_invalid;
14202 }
14203
14204 tempguy.misc6=tempMisc;
14205
14206 if(!p_igetw(&tempMisc,f,keepdata))
14207 {
14208 return qe_invalid;
14209 }
14210
14211 tempguy.misc7=tempMisc;
14212
14213 if(!p_igetw(&tempMisc,f,keepdata))
14214 {
14215 return qe_invalid;
14216 }
14217
14218 tempguy.misc8=tempMisc;
14219
14220 if(!p_igetw(&tempMisc,f,keepdata))
14221 {
14222 return qe_invalid;
14223 }
14224
14225 tempguy.misc9=tempMisc;
14226
14227 if(!p_igetw(&tempMisc,f,keepdata))
14228 {
14229 return qe_invalid;
14230 }
14231
14232 tempguy.misc10=tempMisc;
14233 }
14234
14235
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.bgsfx),f,keepdata))
14236 {
14237 return qe_invalid;
14238 }
14239
14240
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.bosspal),f,keepdata))
14241 {
14242 return qe_invalid;
14243 }
14244
14245
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetw(&(tempguy.extend),f,keepdata))
14246 {
14247 return qe_invalid;
14248 }
14249
14250 //! Enemy Defences
14251
14252 //If a 2.50 quest, use only the 2.5 defences.
14253
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 47616 times.
47616 if(guyversion >= 16 ) // November 2009 - Super Enemy Editor
14254 {
14255
2/2
✓ Branch 0 taken 904704 times.
✓ Branch 1 taken 47616 times.
952320 for(int32_t j=0; j<edefLAST; j++)
14256 {
14257
1/2
✓ Branch 0 taken 904704 times.
✗ Branch 1 not taken.
904704 if(!p_getc(&(tempguy.defense[j]),f,keepdata))
14258 {
14259 return qe_invalid;
14260 }
14261 904704 }
14262 //then copy the generic script defence to all the new script defences
14263
14264 47616 }
14265
14266
14267
14268
14269
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 47616 times.
47616 if(guyversion >= 18)
14270 {
14271
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&(tempguy.hitsfx),f,keepdata))
14272 {
14273 return qe_invalid;
14274 }
14275
14276
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_getc(&(tempguy.deadsfx),f,keepdata))
14277 {
14278 return qe_invalid;
14279 }
14280 47616 }
14281
14282
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(guyversion >= 22)
14283 {
14284
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetl(&(tempguy.misc11),f,keepdata))
14285 {
14286 return qe_invalid;
14287 }
14288
14289
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!p_igetl(&(tempguy.misc12),f,keepdata))
14290 {
14291 return qe_invalid;
14292 }
14293 47616 }
14294 else if(guyversion >= 19)
14295 {
14296 int16_t tempMisc;
14297
14298 if(!p_igetw(&tempMisc,f,keepdata))
14299 {
14300 return qe_invalid;
14301 }
14302
14303 tempguy.misc11=tempMisc;
14304
14305 if(!p_igetw(&tempMisc,f,keepdata))
14306 {
14307 return qe_invalid;
14308 }
14309
14310 tempguy.misc12=tempMisc;
14311 }
14312
14313 //If a 2.54 or later quest, use all of the defences.
14314
2/2
✓ Branch 0 taken 37376 times.
✓ Branch 1 taken 10240 times.
47616 if(guyversion > 24) // Add new guyversion conditional statement
14315 {
14316
2/2
✓ Branch 0 taken 225280 times.
✓ Branch 1 taken 10240 times.
235520 for(int32_t j=edefLAST; j<edefLAST255; j++)
14317 {
14318
1/2
✓ Branch 0 taken 225280 times.
✗ Branch 1 not taken.
225280 if(!p_getc(&(tempguy.defense[j]),f,keepdata))
14319 {
14320 return qe_invalid;
14321 }
14322 225280 }
14323 10240 }
14324
14325
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if(guyversion <= 24) // Port over generic script settings from old quests in the new editor.
14326 {
14327
2/2
✓ Branch 0 taken 373760 times.
✓ Branch 1 taken 37376 times.
411136 for(int32_t j=edefSCRIPT01; j<=edefSCRIPT10; j++)
14328 {
14329 373760 tempguy.defense[j] = tempguy.defense[edefSCRIPT] ;
14330 373760 }
14331 37376 }
14332
14333 //tilewidth, tileheight, hitwidth, hitheight, hitzheight, hitxofs, hityofs, hitzofs
14334
2/2
✓ Branch 0 taken 37376 times.
✓ Branch 1 taken 10240 times.
47616 if(guyversion > 25)
14335 {
14336
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.txsz),f,keepdata))
14337 {
14338 return qe_invalid;
14339 }
14340
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.tysz),f,keepdata))
14341 {
14342 return qe_invalid;
14343 }
14344
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.hxsz),f,keepdata))
14345 {
14346 return qe_invalid;
14347 }
14348
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.hysz),f,keepdata))
14349 {
14350 return qe_invalid;
14351 }
14352
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.hzsz),f,keepdata))
14353 {
14354 return qe_invalid;
14355 }
14356 /* Is it safe to read a fixed with getl, or do I need to typecast it? -Z
14357
14358 */
14359 10240 }
14360 //More Enemy Editor vars for 2.60
14361
2/2
✓ Branch 0 taken 37376 times.
✓ Branch 1 taken 10240 times.
47616 if(guyversion > 26)
14362 {
14363
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.hxofs),f,keepdata))
14364 {
14365 return qe_invalid;
14366 }
14367
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.hyofs),f,keepdata))
14368 {
14369 return qe_invalid;
14370 }
14371
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.xofs),f,keepdata))
14372 {
14373 return qe_invalid;
14374 }
14375
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.yofs),f,keepdata))
14376 {
14377 return qe_invalid;
14378 }
14379
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.zofs),f,keepdata))
14380 {
14381 return qe_invalid;
14382 }
14383 10240 }
14384
14385
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if(guyversion <= 27) // Port over generic script settings from old quests in the new editor.
14386 {
14387 37376 tempguy.wpnsprite = 0;
14388 37376 }
14389
14390
2/2
✓ Branch 0 taken 37376 times.
✓ Branch 1 taken 10240 times.
47616 if(guyversion > 27)
14391 {
14392
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.wpnsprite),f,keepdata))
14393 {
14394 return qe_invalid;
14395 }
14396 10240 }
14397
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if(guyversion <= 28) // Port over generic script settings from old quests in the new editor.
14398 {
14399 37376 tempguy.SIZEflags = 0;
14400 37376 }
14401
2/2
✓ Branch 0 taken 37376 times.
✓ Branch 1 taken 10240 times.
47616 if(guyversion > 28)
14402 {
14403
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.SIZEflags),f,keepdata))
14404 {
14405 return qe_invalid;
14406 }
14407
14408 10240 }
14409
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if(guyversion < 30) // Port over generic script settings from old quests in the new editor.
14410 {
14411 37376 tempguy.frozentile = 0;
14412 37376 tempguy.frozencset = 0;
14413 37376 tempguy.frozenclock = 0;
14414
2/2
✓ Branch 0 taken 373760 times.
✓ Branch 1 taken 37376 times.
411136 for ( int32_t q = 0; q < 10; q++ ) tempguy.frozenmisc[q] = 0;
14415 37376 }
14416
2/2
✓ Branch 0 taken 37376 times.
✓ Branch 1 taken 10240 times.
47616 if(guyversion >= 30)
14417 {
14418
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.frozentile),f,keepdata))
14419 {
14420 return qe_invalid;
14421 }
14422
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.frozencset),f,keepdata))
14423 {
14424 return qe_invalid;
14425 }
14426
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.frozenclock),f,keepdata))
14427 {
14428 return qe_invalid;
14429 }
14430
2/2
✓ Branch 0 taken 102400 times.
✓ Branch 1 taken 10240 times.
112640 for ( int32_t q = 0; q < 10; q++ ) {
14431
1/2
✓ Branch 0 taken 102400 times.
✗ Branch 1 not taken.
102400 if(!p_igetw(&(tempguy.frozenmisc[q]),f,keepdata))
14432 {
14433 return qe_invalid;
14434 }
14435 102400 }
14436
14437 10240 }
14438
14439
2/2
✓ Branch 0 taken 37376 times.
✓ Branch 1 taken 10240 times.
47616 if(guyversion >= 34)
14440 {
14441
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetw(&(tempguy.firesfx),f,keepdata))
14442 {
14443 return qe_invalid;
14444 }
14445
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc16),f,keepdata))
14446 {
14447 return qe_invalid;
14448 }
14449
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc17),f,keepdata))
14450 {
14451 return qe_invalid;
14452 }
14453
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc18),f,keepdata))
14454 {
14455 return qe_invalid;
14456 }
14457
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc19),f,keepdata))
14458 {
14459 return qe_invalid;
14460 }
14461
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc20),f,keepdata))
14462 {
14463 return qe_invalid;
14464 }
14465
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc21),f,keepdata))
14466 {
14467 return qe_invalid;
14468 }
14469
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc22),f,keepdata))
14470 {
14471 return qe_invalid;
14472 }
14473
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc23),f,keepdata))
14474 {
14475 return qe_invalid;
14476 }
14477
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc24),f,keepdata))
14478 {
14479 return qe_invalid;
14480 }
14481
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc25),f,keepdata))
14482 {
14483 return qe_invalid;
14484 }
14485
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc26),f,keepdata))
14486 {
14487 return qe_invalid;
14488 }
14489
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc27),f,keepdata))
14490 {
14491 return qe_invalid;
14492 }
14493
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc28),f,keepdata))
14494 {
14495 return qe_invalid;
14496 }
14497
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc29),f,keepdata))
14498 {
14499 return qe_invalid;
14500 }
14501
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc30),f,keepdata))
14502 {
14503 return qe_invalid;
14504 }
14505
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc31),f,keepdata))
14506 {
14507 return qe_invalid;
14508 }
14509
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc32),f,keepdata))
14510 {
14511 return qe_invalid;
14512 }
14513
14514
2/2
✓ Branch 0 taken 327680 times.
✓ Branch 1 taken 10240 times.
337920 for ( int32_t q = 0; q < 32; q++ ) {
14515
1/2
✓ Branch 0 taken 327680 times.
✗ Branch 1 not taken.
327680 if(!p_igetl(&(tempguy.movement[q]),f,keepdata))
14516 {
14517 return qe_invalid;
14518 }
14519 327680 }
14520
2/2
✓ Branch 0 taken 327680 times.
✓ Branch 1 taken 10240 times.
337920 for ( int32_t q = 0; q < 32; q++ ) {
14521
1/2
✓ Branch 0 taken 327680 times.
✗ Branch 1 not taken.
327680 if(!p_igetl(&(tempguy.new_weapon[q]),f,keepdata))
14522 {
14523 return qe_invalid;
14524 }
14525 327680 }
14526
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetw(&(tempguy.script),f,keepdata))
14527 {
14528 return qe_invalid;
14529 }
14530 //al_trace("NPC Script ID is: %d\n",tempguy.script);
14531
2/2
✓ Branch 0 taken 81920 times.
✓ Branch 1 taken 10240 times.
92160 for ( int32_t q = 0; q < 8; q++ )
14532 {
14533
1/2
✓ Branch 0 taken 81920 times.
✗ Branch 1 not taken.
81920 if(!p_igetl(&(tempguy.initD[q]),f,keepdata))
14534 {
14535 return qe_invalid;
14536 }
14537 81920 }
14538
2/2
✓ Branch 0 taken 20480 times.
✓ Branch 1 taken 10240 times.
30720 for ( int32_t q = 0; q < 2; q++ )
14539 {
14540
1/2
✓ Branch 0 taken 20480 times.
✗ Branch 1 not taken.
20480 if(!p_igetl(&(tempguy.initA[q]),f,keepdata))
14541 {
14542 return qe_invalid;
14543 }
14544 20480 }
14545
14546 10240 }
14547
14548
2/2
✓ Branch 0 taken 37376 times.
✓ Branch 1 taken 10240 times.
47616 if(guyversion >= 37)
14549 {
14550
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.editorflags),f,keepdata))
14551 {
14552 return qe_invalid;
14553 }
14554 10240 }
14555
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if ( guyversion < 37 ) { tempguy.editorflags = 0; }
14556
2/2
✓ Branch 0 taken 37376 times.
✓ Branch 1 taken 10240 times.
47616 if(guyversion >= 38)
14557 {
14558
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc13),f,keepdata))
14559 {
14560 return qe_invalid;
14561 }
14562
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc14),f,keepdata))
14563 {
14564 return qe_invalid;
14565 }
14566
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&(tempguy.misc15),f,keepdata))
14567 {
14568 return qe_invalid;
14569 }
14570
14571 10240 }
14572
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if ( guyversion < 38 )
14573 {
14574 37376 tempguy.misc13 = 0;
14575 37376 tempguy.misc14 = 0;
14576 37376 tempguy.misc15 = 0;
14577 37376 }
14578
14579
2/2
✓ Branch 0 taken 37376 times.
✓ Branch 1 taken 10240 times.
47616 if ( guyversion >= 39 )
14580 {
14581
2/2
✓ Branch 0 taken 81920 times.
✓ Branch 1 taken 10240 times.
92160 for ( int32_t q = 0; q < 8; q++ )
14582 {
14583
2/2
✓ Branch 0 taken 5324800 times.
✓ Branch 1 taken 81920 times.
5406720 for ( int32_t w = 0; w < 65; w++ )
14584 {
14585
1/2
✓ Branch 0 taken 5324800 times.
✗ Branch 1 not taken.
5324800 if(!p_getc(&(tempguy.initD_label[q][w]),f,keepdata))
14586 {
14587 return qe_invalid;
14588 }
14589 5324800 }
14590
2/2
✓ Branch 0 taken 5324800 times.
✓ Branch 1 taken 81920 times.
5406720 for ( int32_t w = 0; w < 65; w++ )
14591 {
14592
1/2
✓ Branch 0 taken 5324800 times.
✗ Branch 1 not taken.
5324800 if(!p_getc(&(tempguy.weapon_initD_label[q][w]),f,keepdata))
14593 {
14594 return qe_invalid;
14595 }
14596 5324800 }
14597 81920 }
14598
14599
14600 10240 }
14601
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if ( guyversion < 39 ) //apply old InitD strings to both
14602 {
14603
2/2
✓ Branch 0 taken 299008 times.
✓ Branch 1 taken 37376 times.
336384 for ( int32_t q = 0; q < 8; q++ )
14604 {
14605 299008 sprintf(tempguy.initD_label[q],"InitD[%d]",q);
14606 299008 sprintf(tempguy.weapon_initD_label[q],"InitD[%d]",q);
14607 299008 }
14608 37376 }
14609
2/2
✓ Branch 0 taken 37376 times.
✓ Branch 1 taken 10240 times.
47616 if ( guyversion >= 40 )
14610 {
14611
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetw(&(tempguy.weaponscript),f,keepdata))
14612 {
14613 return qe_invalid;
14614 }
14615 10240 }
14616
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if ( guyversion < 40 )
14617 {
14618 37376 tempguy.weaponscript = 0;
14619 37376 }
14620 //eweapon script InitD
14621
2/2
✓ Branch 0 taken 37376 times.
✓ Branch 1 taken 10240 times.
47616 if ( guyversion >= 41 )
14622 {
14623
2/2
✓ Branch 0 taken 81920 times.
✓ Branch 1 taken 10240 times.
92160 for ( int32_t q = 0; q < 8; q++ )
14624 {
14625
1/2
✓ Branch 0 taken 81920 times.
✗ Branch 1 not taken.
81920 if(!p_igetl(&(tempguy.weap_initiald[q]),f,keepdata))
14626 {
14627 return qe_invalid;
14628 }
14629 81920 }
14630
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if ( guy_cversion < 4 )
14631 {
14632 if ( tempguy.family == eeKEESE )
14633 {
14634
14635 if ( !tempguy.misc1 )
14636 {
14637 tempguy.misc16 = 120;
14638 tempguy.misc17 = 16;
14639
14640 }
14641 }
14642 if ( tempguy.family == eePEAHAT )
14643 {
14644 tempguy.misc16 = 80;
14645 tempguy.misc17 = 16;
14646 }
14647
14648 if ( tempguy.family == eeGHINI )
14649 {
14650 tempguy.misc16 = 120;
14651 tempguy.misc17 = 10;
14652 }
14653
14654 }
14655 10240 }
14656
14657
14658
14659 //default weapon sprites (quest version < 2.54)
14660 //port over old defaults -Z
14661
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if(guyversion < 32)
14662 {
14663
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 37376 times.
37376 if ( tempguy.wpnsprite <= 0 )
14664 {
14665
16/20
✗ Branch 0 not taken.
✓ Branch 1 taken 1246 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 31070 times.
✓ Branch 4 taken 286 times.
✓ Branch 5 taken 303 times.
✓ Branch 6 taken 901 times.
✓ Branch 7 taken 467 times.
✓ Branch 8 taken 865 times.
✓ Branch 9 taken 76 times.
✓ Branch 10 taken 18 times.
✓ Branch 11 taken 128 times.
✓ Branch 12 taken 18 times.
✓ Branch 13 taken 351 times.
✓ Branch 14 taken 725 times.
✓ Branch 15 taken 103 times.
✓ Branch 16 taken 73 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 746 times.
37376 switch(tempguy.weapon)
14666 {
14667 case wNone:
14668 31070 tempguy.wpnsprite = 0; break;
14669
14670 case wSword:
14671 case wBeam:
14672 case wBrang:
14673 case wBomb:
14674 case wSBomb:
14675 case wLitBomb:
14676 case wLitSBomb:
14677 case wArrow:
14678 case wFire:
14679 case wWhistle:
14680 case wBait:
14681 case wWand:
14682 case wMagic:
14683 case wCatching:
14684 case wWind:
14685 case wRefMagic:
14686 case wRefFireball:
14687 case wRefRock:
14688 case wHammer:
14689 case wHookshot:
14690 case wHSHandle:
14691 case wHSChain:
14692 case wSSparkle:
14693 case wFSparkle:
14694 case wSmack:
14695 case wPhantom:
14696 case wCByrna:
14697 case wRefBeam:
14698 case wStomp:
14699 case lwMax:
14700 case wScript1:
14701 case wScript2:
14702 case wScript3:
14703 case wScript4:
14704 case wScript5:
14705 case wScript6:
14706 case wScript7:
14707 case wScript8:
14708 case wScript9:
14709 case wScript10:
14710 case wIce:
14711 //Cannot use any of these weapons yet.
14712 tempguy.wpnsprite = -1;
14713 break;
14714
14715 case wEnemyWeapons:
14716 1246 case ewFireball: tempguy.wpnsprite = 17; break;
14717
14718 286 case ewArrow: tempguy.wpnsprite = 19; break;
14719 303 case ewBrang: tempguy.wpnsprite = 4; break;
14720 901 case ewSword: tempguy.wpnsprite = 20; break;
14721 467 case ewRock: tempguy.wpnsprite = 18; break;
14722 865 case ewMagic: tempguy.wpnsprite = 21; break;
14723 76 case ewBomb: tempguy.wpnsprite = 78; break;
14724 18 case ewSBomb: tempguy.wpnsprite = 79; break;
14725 128 case ewLitBomb: tempguy.wpnsprite = 76; break;
14726 18 case ewLitSBomb: tempguy.wpnsprite = 77; break;
14727 351 case ewFireTrail: tempguy.wpnsprite = 80; break;
14728 725 case ewFlame: tempguy.wpnsprite = 35; break;
14729 103 case ewWind: tempguy.wpnsprite = 36; break;
14730 73 case ewFlame2: tempguy.wpnsprite = 81; break;
14731 case ewFlame2Trail: tempguy.wpnsprite = 82; break;
14732 case ewIce: tempguy.wpnsprite = 83; break;
14733 746 case ewFireball2: tempguy.wpnsprite = 17; break; //fireball (rising)
14734
14735
14736 default: break; //No assign.
14737 }
14738 37376 }
14739 37376 }
14740
14741 //default weapon fire sound (quest version < 2.54)
14742 //port over old defaults and zero new data. -Z
14743
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if(guyversion < 34)
14744 {
14745
2/2
✓ Branch 0 taken 1196032 times.
✓ Branch 1 taken 37376 times.
1233408 for ( int32_t q = 0; q < 32; q++ )
14746 {
14747 1196032 tempguy.movement[q] = 0;
14748 1196032 tempguy.new_weapon[q] = 0;
14749
14750 1196032 }
14751
14752 //NPC Script attributes.
14753 37376 tempguy.script = 0; //No scripted enemies existed. -Z
14754
2/2
✓ Branch 0 taken 299008 times.
✓ Branch 1 taken 37376 times.
336384 for ( int32_t q = 0; q < 8; q++ ) tempguy.initD[q] = 0; //Script Data
14755
2/2
✓ Branch 0 taken 74752 times.
✓ Branch 1 taken 37376 times.
112128 for ( int32_t q = 0; q < 2; q++ ) tempguy.initA[q] = 0; //Script Data
14756
14757 37376 tempguy.misc16 = 0;
14758 37376 tempguy.misc17 = 0;
14759 37376 tempguy.misc18 = 0;
14760 37376 tempguy.misc19 = 0;
14761 37376 tempguy.misc20 = 0;
14762 37376 tempguy.misc21 = 0;
14763 37376 tempguy.misc22 = 0;
14764 37376 tempguy.misc23 = 0;
14765 37376 tempguy.misc24 = 0;
14766 37376 tempguy.misc25 = 0;
14767 37376 tempguy.misc26 = 0;
14768 37376 tempguy.misc27 = 0;
14769 37376 tempguy.misc28 = 0;
14770 37376 tempguy.misc29 = 0;
14771 37376 tempguy.misc30 = 0;
14772 37376 tempguy.misc31 = 0;
14773 37376 tempguy.misc32 = 0;
14774
14775 //old default sounds
14776
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 37376 times.
37376 if ( tempguy.firesfx <= 0 )
14777 {
14778
16/20
✗ Branch 0 not taken.
✓ Branch 1 taken 1246 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 31070 times.
✓ Branch 4 taken 286 times.
✓ Branch 5 taken 303 times.
✓ Branch 6 taken 901 times.
✓ Branch 7 taken 467 times.
✓ Branch 8 taken 865 times.
✓ Branch 9 taken 76 times.
✓ Branch 10 taken 18 times.
✓ Branch 11 taken 128 times.
✓ Branch 12 taken 18 times.
✓ Branch 13 taken 351 times.
✓ Branch 14 taken 725 times.
✓ Branch 15 taken 103 times.
✓ Branch 16 taken 73 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 746 times.
37376 switch(tempguy.weapon)
14779 {
14780 case wNone:
14781 31070 tempguy.firesfx = 0; break;
14782
14783 case wSword:
14784 case wBeam:
14785 case wBrang:
14786 case wBomb:
14787 case wSBomb:
14788 case wLitBomb:
14789 case wLitSBomb:
14790 case wArrow:
14791 case wFire:
14792 case wWhistle:
14793 case wBait:
14794 case wWand:
14795 case wMagic:
14796 case wCatching:
14797 case wWind:
14798 case wRefMagic:
14799 case wRefFireball:
14800 case wRefRock:
14801 case wHammer:
14802 case wHookshot:
14803 case wHSHandle:
14804 case wHSChain:
14805 case wSSparkle:
14806 case wFSparkle:
14807 case wSmack:
14808 case wPhantom:
14809 case wCByrna:
14810 case wRefBeam:
14811 case wStomp:
14812 case lwMax:
14813 case wScript1:
14814 case wScript2:
14815 case wScript3:
14816 case wScript4:
14817 case wScript5:
14818 case wScript6:
14819 case wScript7:
14820 case wScript8:
14821 case wScript9:
14822 case wScript10:
14823 case wIce:
14824 //Cannot use any of these weapons yet.
14825 tempguy.firesfx = -1;
14826 break;
14827
14828 case wEnemyWeapons:
14829 1246 case ewFireball: tempguy.firesfx = 40; break;
14830
14831 286 case ewArrow: tempguy.firesfx = 1; break; //Ghost.zh has 0?
14832 303 case ewBrang: tempguy.firesfx = 4; break; //Ghost.zh has 0?
14833 901 case ewSword: tempguy.firesfx = 20; break; //Ghost.zh has 0?
14834 467 case ewRock: tempguy.firesfx = 51; break;
14835 865 case ewMagic: tempguy.firesfx = 32; break;
14836 76 case ewBomb: tempguy.firesfx = 3; break; //Ghost.zh has 0?
14837 18 case ewSBomb: tempguy.firesfx = 3; break; //Ghost.zh has 0?
14838 128 case ewLitBomb: tempguy.firesfx = 21; break; //Ghost.zh has 0?
14839 18 case ewLitSBomb: tempguy.firesfx = 21; break; //Ghost.zh has 0?
14840 351 case ewFireTrail: tempguy.firesfx = 13; break;
14841 725 case ewFlame: tempguy.firesfx = 13; break;
14842 103 case ewWind: tempguy.firesfx = 32; break;
14843 73 case ewFlame2: tempguy.firesfx = 13; break;
14844 case ewFlame2Trail: tempguy.firesfx = 13; break;
14845 case ewIce: tempguy.firesfx = 44; break;
14846 746 case ewFireball2: tempguy.firesfx = 40; break; //fireball (rising)
14847
14848 //what about special attacks (e.g. summoning == 56)
14849 default: break; //No assign.
14850 }
14851 37376 }
14852 37376 }
14853
14854 //Port hardcoded hit sound to the enemy hitsfx defaults for older quests.
14855
4/6
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
✓ Branch 2 taken 10240 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 10240 times.
47616 if(Header->zelda_version <= 0x250 || ( Header->zelda_version > 0x250 && guyversion < 35 ))
14856 {
14857
2/2
✓ Branch 0 taken 2972 times.
✓ Branch 1 taken 34404 times.
37376 if ( tempguy.hitsfx == 0 ) tempguy.hitsfx = 11;
14858 37376 }
14859 //Keese and bat halt rates.
14860
3/4
✓ Branch 0 taken 37376 times.
✓ Branch 1 taken 10240 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 37376 times.
47616 if ( guyversion < 42 && guy_cversion < 4 )
14861 {
14862
14863
2/2
✓ Branch 0 taken 36871 times.
✓ Branch 1 taken 505 times.
37376 if ( tempguy.family == eeKEESE )
14864 {
14865
14866
2/2
✓ Branch 0 taken 195 times.
✓ Branch 1 taken 310 times.
505 if ( !tempguy.misc1 )
14867 {
14868 310 tempguy.misc16 = 120;
14869 310 tempguy.misc17 = 16;
14870
14871 310 }
14872 505 }
14873
2/2
✓ Branch 0 taken 37216 times.
✓ Branch 1 taken 160 times.
37376 if ( tempguy.family == eePEAHAT )
14874 {
14875 160 tempguy.misc16 = 80;
14876 160 tempguy.misc17 = 16;
14877 160 }
14878
2/2
✓ Branch 0 taken 37303 times.
✓ Branch 1 taken 73 times.
37376 if ( tempguy.family == eeGHINI )
14879 {
14880 73 tempguy.misc16 = 120;
14881 73 tempguy.misc17 = 10;
14882 73 }
14883
14884
14885 37376 }
14886
14887
14888 //miscellaneous other corrections
14889 //fix the mirror wizzrobe -DD
14890
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(guyversion < 7)
14891 {
14892 if(i == eMWIZ)
14893 {
14894 tempguy.misc2 = 0;
14895 tempguy.misc4 = 1;
14896 }
14897 }
14898
14899
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(guyversion < 8)
14900 {
14901 if(i == eGLEEOK1 || i == eGLEEOK2 || i == eGLEEOK3 || i == eGLEEOK4 || i == eGLEEOK1F || i == eGLEEOK2F || i == eGLEEOK3F || i == eGLEEOK4F)
14902 {
14903 // Some of these are deliberately different to NewDefault/defdata.cpp, by the way. -L
14904 tempguy.misc5 = 4; //neck length in segments
14905 tempguy.misc6 = 8; //neck offset from first body tile
14906 tempguy.misc7 = 40; //offset for each subsequent neck tile from the first neck tile
14907 tempguy.misc8 = 168; //head offset from first body tile
14908 tempguy.misc9 = 228; //flying head offset from first body tile
14909
14910 if(i == eGLEEOK1F || i == eGLEEOK2F || i == eGLEEOK3F || i == eGLEEOK4F)
14911 {
14912 tempguy.misc6 += 10; //neck offset from first body tile
14913 tempguy.misc8 -= 12; //head offset from first body tile
14914 }
14915 }
14916 }
14917
14918
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(guyversion < 10) // December 2007 - Dodongo CSet fix
14919 {
14920 if(get_bit(deprecated_rules,46) && tempguy.family==eeDONGO && tempguy.misc1==0)
14921 tempguy.bosspal = spDIG;
14922 }
14923
14924
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(guyversion < 11) // December 2007 - Spinning Tile fix
14925 {
14926 if(tempguy.family==eeSPINTILE)
14927 {
14928 tempguy.flags |= guy_superman;
14929 tempguy.item_set = 0; // Don't drop items
14930 tempguy.step = 300;
14931 }
14932 }
14933
14934
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(guyversion < 12) // October 2008 - Flashing Bubble, Rope 2, and Ghini 2 fix
14935 {
14936 if(get_bit(deprecated_rules, qr_NOROPE2FLASH_DEP))
14937 {
14938 if(tempguy.family==eeROPE)
14939 {
14940 tempguy.flags2 &= ~guy_flashing;
14941 }
14942 }
14943
14944 if(get_bit(deprecated_rules, qr_NOBUBBLEFLASH_DEP))
14945 {
14946 if(tempguy.family==eeBUBBLE)
14947 {
14948 tempguy.flags2 &= ~guy_flashing;
14949 }
14950 }
14951
14952 if((tempguy.family==eeGHINI)&&(tempguy.misc1))
14953 {
14954 if(get_bit(deprecated_rules, qr_GHINI2BLINK_DEP))
14955 {
14956 tempguy.flags2 |= guy_blinking;
14957 }
14958
14959 if(get_bit(deprecated_rules, qr_PHANTOMGHINI2_DEP))
14960 {
14961 tempguy.flags2 |= guy_transparent;
14962 }
14963 }
14964 }
14965
14966
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(guyversion < 15) // July 2009 - Guy Fire and Fairy fix
14967 {
14968 if(i==gFIRE)
14969 {
14970 tempguy.e_anim = aFLIP;
14971 tempguy.e_frate = 24;
14972 }
14973
14974 if(i==gFAIRY)
14975 {
14976 tempguy.e_anim = a2FRM;
14977 tempguy.e_frate = 16;
14978 }
14979 }
14980
14981
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(guyversion < 16) // November 2009 - Super Enemy Editor part 1
14982 {
14983 if(i==0) Z_message("Updating guys to version 16...\n");
14984
14985 update_guy_1(&tempguy);
14986
14987 if(i==eMPOLSV)
14988 {
14989 tempguy.defense[edefARROW] = edCHINK;
14990 tempguy.defense[edefMAGIC] = ed1HKO;
14991 tempguy.defense[edefREFMAGIC] = ed1HKO;
14992 }
14993 }
14994
14995
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(guyversion < 17) // December 2009
14996 {
14997 if(tempguy.family==eePROJECTILE)
14998 {
14999 tempguy.misc1 = 0;
15000 }
15001 }
15002
15003
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(guyversion < 18) // January 2010
15004 {
15005 bool boss = (tempguy.family == eeAQUA || tempguy.family==eeDONGO || tempguy.family == eeMANHAN || tempguy.family == eeGHOMA || tempguy.family==eeDIG
15006 || tempguy.family == eeGLEEOK || tempguy.family==eePATRA || tempguy.family == eeGANON || tempguy.family==eeMOLD);
15007
15008 tempguy.hitsfx = (boss && tempguy.family != eeMOLD && tempguy.family != eeDONGO && tempguy.family != eeDIG) ? WAV_GASP : 0;
15009 tempguy.deadsfx = (boss && (tempguy.family != eeDIG || tempguy.misc10 == 0)) ? WAV_GASP : WAV_EDEAD;
15010
15011 if(tempguy.family == eeAQUA)
15012 for(int32_t j=0; j<edefLAST; j++) tempguy.defense[j] = default_guys[eRAQUAM].defense[j];
15013 else if(tempguy.family == eeMANHAN)
15014 for(int32_t j=0; j<edefLAST; j++) tempguy.defense[j] = default_guys[eMANHAN].defense[j];
15015 else if(tempguy.family==eePATRA)
15016 for(int32_t j=0; j<edefLAST; j++) tempguy.defense[j] = default_guys[eGLEEOK1].defense[j];
15017 else if(tempguy.family==eeGHOMA)
15018 {
15019 for(int32_t j=0; j<edefLAST; j++)
15020 tempguy.defense[j] = default_guys[eGOHMA1].defense[j];
15021
15022 tempguy.defense[edefARROW] = ((tempguy.misc1==3) ? edCHINKL8 : (tempguy.misc1==2) ? edCHINKL4 : 0);
15023
15024 if(tempguy.misc1==3 && !tempguy.weapon) tempguy.weapon = ewFlame;
15025
15026 tempguy.misc1--;
15027 }
15028 else if(tempguy.family == eeGLEEOK)
15029 {
15030 for(int32_t j=0; j<edefLAST; j++)
15031 tempguy.defense[j] = default_guys[eGLEEOK1].defense[j];
15032
15033 if(tempguy.misc3==1 && !tempguy.weapon) tempguy.weapon = ewFlame;
15034 }
15035 else if(tempguy.family == eeARMOS)
15036 {
15037 tempguy.family=eeWALK;
15038 tempguy.hrate = 0;
15039 tempguy.misc10 = tempguy.misc1;
15040 tempguy.misc1 = tempguy.misc2 = tempguy.misc3 = tempguy.misc4 = tempguy.misc5 = tempguy.misc6 = tempguy.misc7 = tempguy.misc8 = 0;
15041 tempguy.misc9 = e9tARMOS;
15042 }
15043 else if(tempguy.family == eeGHINI && !tempguy.misc1)
15044 {
15045 tempguy.family=eeWALK;
15046 tempguy.hrate = 0;
15047 tempguy.misc1 = tempguy.misc2 = tempguy.misc3 = tempguy.misc4 = tempguy.misc5 = tempguy.misc6 =
15048 tempguy.misc7 = tempguy.misc8 = tempguy.misc9 = tempguy.misc10 = 0;
15049 }
15050
15051 // Spawn animation flags
15052 if(tempguy.family == eeWALK && (tempguy.flags2&cmbflag_armos || tempguy.flags2&cmbflag_ghini))
15053 tempguy.flags |= guy_fadeflicker;
15054 else
15055 tempguy.flags &= 0x0F00000F; // Get rid of the unused flags!
15056 }
15057
15058
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(guyversion < 20) // April 2010
15059 {
15060 if(tempguy.family == eeTRAP)
15061 {
15062 tempguy.misc2 = tempguy.misc10;
15063
15064 if(tempguy.misc10>=1)
15065 {
15066 tempguy.misc1++;
15067 }
15068
15069 tempguy.misc10 = 0;
15070 }
15071
15072 // Bomb Blast fix
15073 if(tempguy.weapon==ewBomb && tempguy.family!=eeROPE && (tempguy.family!=eeWALK || tempguy.misc2 != e2tBOMBCHU))
15074 tempguy.weapon = ewLitBomb;
15075 else if(tempguy.weapon==ewSBomb && tempguy.family!=eeROPE && (tempguy.family!=eeWALK || tempguy.misc2 != e2tBOMBCHU))
15076 tempguy.weapon = ewLitSBomb;
15077 }
15078
15079
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(guyversion < 21) // September 2011
15080 {
15081 if(tempguy.family == eeKEESE || tempguy.family == eeKEESETRIB)
15082 {
15083 if(tempguy.family == eeKEESETRIB)
15084 {
15085 tempguy.family = eeKEESE;
15086 tempguy.misc2 = e2tKEESETRIB;
15087 tempguy.misc1 = 0;
15088 }
15089
15090 tempguy.rate = 2;
15091 tempguy.hrate = 8;
15092 tempguy.homing = 0;
15093 tempguy.step= (tempguy.family == eeKEESE && tempguy.misc1 ? 100:62);
15094 }
15095 else if(tempguy.family == eePEAHAT || tempguy.family==eePATRA)
15096 {
15097 if(tempguy.family == eePEAHAT)
15098 {
15099 tempguy.rate = 4;
15100 tempguy.step = 62;
15101 }
15102 else
15103 tempguy.step = 25;
15104
15105 tempguy.hrate = 8;
15106 tempguy.homing = 0;
15107 }
15108 else if(tempguy.family == eeDIG || tempguy.family == eeMANHAN)
15109 {
15110 if(tempguy.family == eeMANHAN)
15111 tempguy.step=50;
15112
15113 tempguy.hrate = 16;
15114 tempguy.homing = 0;
15115 }
15116 else if(tempguy.family == eeGLEEOK)
15117 {
15118 tempguy.rate = 2;
15119 tempguy.homing = 0;
15120 tempguy.hrate = 9;
15121 tempguy.step=89;
15122 }
15123 else if(tempguy.family == eeGHINI)
15124 {
15125 tempguy.rate = 4;
15126 tempguy.hrate = 12;
15127 tempguy.step=62;
15128 tempguy.homing = 0;
15129 }
15130
15131 // Bigdig random rate fix
15132 if(tempguy.family==eeDIG && tempguy.misc10==1)
15133 {
15134 tempguy.rate = 2;
15135 }
15136 }
15137
15138
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(guyversion < 24) // November 2012
15139 {
15140 if(tempguy.family==eeLANM)
15141 tempguy.misc3 = 1;
15142 else if(tempguy.family==eeMOLD)
15143 tempguy.misc2 = 0;
15144 }
15145
15146
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if(guyversion < 33) //Whistle defence did not exist before this version of 2.54. -Z
15147 {
15148
2/2
✓ Branch 0 taken 641 times.
✓ Branch 1 taken 36735 times.
37376 if(tempguy.family!=eeDIG)
15149 {
15150 36735 tempguy.defense[edefWhistle] = edIGNORE; //Might need to be ignore, universally.
15151 36735 }
15152
15153 37376 }
15154 // does not seem to solve the issue!
15155
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if ( Header->zelda_version <= 0x210 )
15156 {
15157 al_trace("Detected version %d for dodongo patch.\n",Header->zelda_version);
15158 if ( tempguy.family == eeDONGO )
15159 {
15160 tempguy.deadsfx = 15; //In 2.10 and earlier, Dodongos used this as their death sound.
15161 }
15162 }
15163
15164
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if(guyversion >= 42)
15165 {
15166
2/2
✓ Branch 0 taken 9216 times.
✓ Branch 1 taken 1024 times.
10240 if(guyversion >= 47)
15167 {
15168
1/2
✓ Branch 0 taken 9216 times.
✗ Branch 1 not taken.
9216 if(!p_igetl(&(tempguy.moveflags),f,keepdata))
15169 {
15170 return qe_invalid;
15171 }
15172 9216 }
15173 else
15174 {
15175 byte fl;
15176
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_getc(&fl,f,keepdata))
15177 {
15178 return qe_invalid;
15179 }
15180 1024 tempguy.moveflags = fl;
15181 }
15182 10240 }
15183 else
15184 {
15185
7/8
✓ Branch 0 taken 141 times.
✓ Branch 1 taken 29455 times.
✓ Branch 2 taken 1167 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 504 times.
✓ Branch 5 taken 268 times.
✓ Branch 6 taken 232 times.
✓ Branch 7 taken 5609 times.
37376 switch(tempguy.family)
15186 {
15187 //No gravity; floats over pits
15188 case eeTEK: case eePEAHAT: case eeROCK: case eeTRAP:
15189 case eePROJECTILE: case eeSPINTILE: case eeKEESE: case eeFIRE:
15190 //Special (bosses, etc)
15191 case eeFAIRY: case eeGUY: case eeNONE: case eeZORA:
15192 case eeAQUA: case eeDIG: case eeGHOMA: case eeGANON:
15193 case eePATRA: case eeGLEEOK: case eeMOLD: case eeMANHAN:
15194 29455 tempguy.moveflags = FLAG_CAN_PITWALK;
15195 29455 break;
15196 //No gravity, but falls in pits
15197 case eeLEV:
15198 504 tempguy.moveflags = FLAG_CAN_PITFALL;
15199 504 break;
15200 //Bosses that respect pits
15201 case eeDONGO:
15202 268 tempguy.moveflags = FLAG_OBEYS_GRAV;
15203 268 break;
15204 case eeLANM:
15205 232 tempguy.moveflags = 0;
15206 232 break;
15207 //Gravity, floats over pits
15208 case eeWIZZ: case eeWALLM: case eeGHINI:
15209 1167 tempguy.moveflags = FLAG_OBEYS_GRAV | FLAG_CAN_PITWALK;
15210 1167 break;
15211 //Gravity and falls in pits
15212 case eeWALK:
15213
4/4
✓ Branch 0 taken 5299 times.
✓ Branch 1 taken 310 times.
✓ Branch 2 taken 273 times.
✓ Branch 3 taken 5026 times.
5609 if (tempguy.misc9==e9tPOLSVOICE||tempguy.misc9==e9tVIRE)
15214 583 break;
15215 [[fallthrough]];
15216 case eeOTHER:
15217 case eeSCRIPT01: case eeSCRIPT02: case eeSCRIPT03: case eeSCRIPT04: case eeSCRIPT05:
15218 case eeSCRIPT06: case eeSCRIPT07: case eeSCRIPT08: case eeSCRIPT09: case eeSCRIPT10:
15219 case eeSCRIPT11: case eeSCRIPT12: case eeSCRIPT13: case eeSCRIPT14: case eeSCRIPT15:
15220 case eeSCRIPT16: case eeSCRIPT17: case eeSCRIPT18: case eeSCRIPT19: case eeSCRIPT20:
15221 case eeFFRIENDLY01: case eeFFRIENDLY02: case eeFFRIENDLY03: case eeFFRIENDLY04: case eeFFRIENDLY05:
15222 case eeFFRIENDLY06: case eeFFRIENDLY07: case eeFFRIENDLY08: case eeFFRIENDLY09: case eeFFRIENDLY10:
15223 5167 tempguy.moveflags = FLAG_OBEYS_GRAV | FLAG_CAN_PITFALL;
15224 5167 }
15225 }
15226
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if(guyversion < 43)
15227 {
15228
2/2
✓ Branch 0 taken 30622 times.
✓ Branch 1 taken 6754 times.
37376 switch(tempguy.family)
15229 {
15230 //No gravity; floats over pits
15231 case eeTEK: case eePEAHAT: case eeROCK: case eeTRAP:
15232 case eePROJECTILE: case eeSPINTILE: case eeKEESE: case eeFIRE:
15233 //Special (bosses, etc)
15234 case eeFAIRY: case eeGUY: case eeNONE: case eeZORA:
15235 case eeAQUA: case eeDIG: case eeGHOMA: case eeGANON:
15236 case eePATRA: case eeGLEEOK: case eeMOLD: case eeMANHAN:
15237 case eeWIZZ: case eeWALLM: case eeGHINI:
15238 //Gravity, floats over pits
15239 30622 tempguy.moveflags |= FLAG_CAN_WATERWALK;
15240 30622 break;
15241 }
15242 37376 }
15243
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if (guyversion < 44)
15244 {
15245
2/2
✓ Branch 0 taken 37019 times.
✓ Branch 1 taken 357 times.
37376 if ( tempguy.family == eeGHOMA )
15246 {
15247 357 tempguy.flags |= guy_fadeinstant;
15248 357 }
15249 37376 }
15250
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if (guyversion > 44)
15251 {
15252
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_getc(&(tempguy.spr_shadow),f,keepdata))
15253 {
15254 return qe_invalid;
15255 }
15256
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_getc(&(tempguy.spr_death),f,keepdata))
15257 {
15258 return qe_invalid;
15259 }
15260
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_getc(&(tempguy.spr_spawn),f,keepdata))
15261 {
15262 return qe_invalid;
15263 }
15264 10240 }
15265 else
15266 {
15267
2/2
✓ Branch 0 taken 37230 times.
✓ Branch 1 taken 146 times.
37376 tempguy.spr_shadow = (tempguy.family==eeROCK && tempguy.misc10==1) ? iwLargeShadow : iwShadow;
15268 37376 tempguy.spr_death = iwDeath;
15269 37376 tempguy.spr_spawn = iwSpawn;
15270 }
15271
15272
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 37376 times.
47616 if(guyversion < 46)
15273 {
15274
4/4
✓ Branch 0 taken 5609 times.
✓ Branch 1 taken 31767 times.
✓ Branch 2 taken 5299 times.
✓ Branch 3 taken 310 times.
37376 if(tempguy.family == eeWALK && tempguy.misc9 == e9tPOLSVOICE)
15275 {
15276 310 tempguy.moveflags |= FLAG_CAN_WATERWALK;
15277 310 }
15278 37376 }
15279
15280
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 47616 times.
47616 if(keepdata)
15281 {
15282 47616 guysbuf[i] = tempguy;
15283 47616 }
15284 47616 }
15285 93 }
15286
15287 93 return 0;
15288 93 }
15289
15290 void update_guy_1(guydata *tempguy) // November 2009
15291 {
15292 bool doesntcount = false;
15293 tempguy->flags &= ~weak_arrow; // Formerly 'weak to arrow' which wasn't implemented
15294
15295 switch(tempguy->family)
15296 {
15297 case 1: //eeWALK
15298 switch(tempguy->misc10)
15299 {
15300 case 0: //Stalfos
15301 if(tempguy->misc1==1) // Fires four projectiles at once
15302 tempguy->misc1=4;
15303
15304 break;
15305
15306 case 1: //Darknut
15307 goto darknuts;
15308 break;
15309 }
15310
15311 tempguy->misc10 = 0;
15312 break;
15313
15314 case 2: //eeSHOOT
15315 tempguy->family = eeWALK;
15316
15317 switch(tempguy->misc10)
15318 {
15319 case 0: //Octorok
15320 if(tempguy->misc1==1||tempguy->misc1==2)
15321 {
15322 tempguy->misc1=e1tFIREOCTO;
15323 tempguy->misc2=e2tFIREOCTO;
15324 }
15325 else tempguy->misc1 = 0;
15326
15327 tempguy->misc6=tempguy->misc4;
15328 tempguy->misc4=tempguy->misc3;
15329 tempguy->misc3=0;
15330 break;
15331
15332 case 1: // Moblin
15333 tempguy->misc1 = 0;
15334 break;
15335
15336 case 2: //Lynel
15337 tempguy->misc6=tempguy->misc1+1;
15338 tempguy->misc1=0;
15339 break;
15340
15341 case 3: //Stalfos 2
15342 if(tempguy->misc1==1) // Fires four projectiles at once
15343 tempguy->misc1=e1t4SHOTS;
15344 else tempguy->misc1 = 0;
15345
15346 break;
15347
15348 case 4: //Darknut 5
15349 darknuts:
15350 tempguy->defense[edefFIRE] = edIGNORE;
15351 tempguy->defense[edefBRANG] = edSTUNORCHINK;
15352 tempguy->defense[edefHOOKSHOT] = 0;
15353 tempguy->defense[edefARROW] = tempguy->defense[edefBYRNA] = tempguy->defense[edefREFROCK] =
15354 tempguy->defense[edefMAGIC] = tempguy->defense[edefSTOMP] = edCHINK;
15355
15356 if(tempguy->misc1==1)
15357 tempguy->misc1=2;
15358 else if(tempguy->misc1==2)
15359 {
15360 tempguy->misc4=tempguy->misc3;
15361 tempguy->misc3=tempguy->misc2;
15362 tempguy->misc2=e2tSPLIT;
15363 tempguy->misc1 = 0;
15364 }
15365 else tempguy->misc1 = 0;
15366
15367 tempguy->flags |= inv_front;
15368
15369 if(get_bit(deprecated_rules,qr_BRKBLSHLDS_DEP))
15370 tempguy->flags |= guy_bkshield;
15371
15372 break;
15373 }
15374
15375 tempguy->misc10 = 0;
15376 break;
15377
15378 /*
15379 case 9: //eeARMOS
15380 tempguy->family = eeWALK;
15381 break;
15382 */
15383 case 11: //eeGEL
15384 case 33: //eeGELTRIB
15385 if(tempguy->family==33)
15386 {
15387 tempguy->misc4 = 1;
15388
15389 if(get_bit(deprecated_rules, qr_OLDTRIBBLES_DEP)) //Old Tribbles
15390 tempguy->misc3 = tempguy->misc2;
15391
15392 tempguy->misc2 = e2tTRIBBLE;
15393 }
15394 else
15395 {
15396 tempguy->misc4 = 0;
15397 tempguy->misc3 = 0;
15398 tempguy->misc2 = 0;
15399 }
15400
15401 tempguy->family = eeWALK;
15402
15403 if(tempguy->misc1)
15404 {
15405 tempguy->misc1=1;
15406 tempguy->weapon = ewFireTrail;
15407 }
15408
15409 break;
15410
15411 case 34: //eeZOLTRIB
15412 case 12: //eeZOL
15413 tempguy->misc4=tempguy->misc3;
15414 tempguy->misc3=tempguy->misc2;
15415 tempguy->family = eeWALK;
15416 tempguy->misc2=e2tSPLITHIT;
15417
15418 if(tempguy->misc1)
15419 {
15420 tempguy->misc1=1;
15421 tempguy->weapon = ewFireTrail;
15422 }
15423
15424 break;
15425
15426 case 13: //eeROPE
15427 tempguy->family = eeWALK;
15428 tempguy->misc9 = e9tROPE;
15429
15430 if(tempguy->misc1)
15431 {
15432 tempguy->misc4 = tempguy->misc3;
15433 tempguy->misc3 = tempguy->misc2;
15434 tempguy->misc2 = e2tBOMBCHU;
15435 }
15436
15437 tempguy->misc1 = 0;
15438 break;
15439
15440 case 14: //eeGORIYA
15441 tempguy->family = eeWALK;
15442
15443 if(tempguy->misc1!=2) tempguy->misc1 = 0;
15444
15445 break;
15446
15447 case 17: //eeBUBBLE
15448 tempguy->family = eeWALK;
15449 tempguy->misc8 = tempguy->misc2;
15450 tempguy->misc7 = tempguy->misc1 + 1;
15451 tempguy->misc1 = tempguy->misc2 = 0;
15452
15453 //fallthrogh
15454 case eeTRAP:
15455 case eeROCK:
15456 doesntcount = true;
15457 break;
15458
15459 case 35: //eeVIRETRIB
15460 case 18: //eeVIRE
15461 tempguy->family = eeWALK;
15462 tempguy->misc4=tempguy->misc3;
15463 tempguy->misc3=tempguy->misc2;
15464 tempguy->misc2=e2tSPLITHIT;
15465 tempguy->misc9=e9tVIRE;
15466 break;
15467
15468 case 19: //eeLIKE
15469 tempguy->family = eeWALK;
15470 tempguy->misc7 = e7tEATITEMS;
15471 tempguy->misc8=95;
15472 break;
15473
15474 case 20: //eePOLSV
15475 tempguy->defense[edefBRANG] = edSTUNORCHINK;
15476 tempguy->defense[edefBOMB] = tempguy->defense[edefSBOMB] = tempguy->defense[edefFIRE] = edIGNORE;
15477 tempguy->defense[edefMAGIC] = tempguy->defense[edefBYRNA] = edCHINK;
15478 tempguy->defense[edefARROW] = ed1HKO;
15479 tempguy->defense[edefHOOKSHOT] = edSTUNONLY;
15480 tempguy->family = eeWALK;
15481 tempguy->misc9 = e9tPOLSVOICE;
15482 tempguy->rate = 4;
15483 tempguy->homing = 32;
15484 tempguy->hrate = 10;
15485 tempguy->grumble = 0;
15486 break;
15487
15488 case eeWIZZ:
15489 if(tempguy->misc4)
15490 {
15491 for(int32_t i=0; i < edefLAST; i++)
15492 tempguy->defense[i] = (i != edefREFBEAM && i != edefREFMAGIC && i != edefQUAKE) ? edIGNORE : 0;
15493 }
15494 else
15495 {
15496 tempguy->defense[edefBRANG] = edSTUNORCHINK;
15497 tempguy->defense[edefMAGIC] = edCHINK;
15498 tempguy->defense[edefHOOKSHOT] = edSTUNONLY;
15499 tempguy->defense[edefARROW] = tempguy->defense[edefFIRE] =
15500 tempguy->defense[edefWAND] = tempguy->defense[edefBYRNA] = edIGNORE;
15501 }
15502
15503 break;
15504
15505 case eePEAHAT:
15506 tempguy->flags &= ~(guy_superman|guy_sbombonly);
15507
15508 if(!(tempguy->flags & guy_bhit))
15509 tempguy->defense[edefBRANG] = edSTUNONLY;
15510
15511 break;
15512
15513 case eeLEV:
15514 tempguy->defense[edefSTOMP] = edCHINK;
15515 break;
15516 }
15517
15518 // Old flags
15519 if(tempguy->flags & guy_superman)
15520 {
15521 for(int32_t i = 0; i < edefLAST; i++)
15522 if(!(i==edefSBOMB && (tempguy->flags & guy_sbombonly)))
15523 tempguy->defense[i] = (i==edefBRANG && tempguy->defense[i] != edIGNORE
15524 && tempguy->family != eeROCK && tempguy->family != eeTRAP
15525 && tempguy->family != eePROJECTILE) ? edSTUNORIGNORE : edIGNORE;
15526 }
15527
15528 tempguy->flags &= ~(guy_superman|guy_sbombonly);
15529
15530 if(doesntcount)
15531 tempguy->flags |= (guy_doesntcount);
15532 }
15533
15534
15535 128520 int32_t readmapscreen_old(PACKFILE *f, zquestheader *Header, mapscr *temp_mapscr, zcmap *temp_map, word version)
15536 {
15537 byte tempbyte, padding;
15538 int32_t extras, secretcombos;
15539 //al_trace("readmapscreen Header->zelda_version: %x\n",Header->zelda_version);
15540
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->valid),f,true))
15541 {
15542 return qe_invalid;
15543 }
15544
15545
15546
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->guy),f,true))
15547 {
15548 return qe_invalid;
15549 }
15550
15551
2/6
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 128520 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<146)))
15552 {
15553 if(!p_getc(&tempbyte,f,true))
15554 {
15555 return qe_invalid;
15556 }
15557
15558 temp_mapscr->str=tempbyte;
15559 }
15560 else
15561 {
15562
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_igetw(&(temp_mapscr->str),f,true))
15563 {
15564 return qe_invalid;
15565 }
15566 }
15567
15568
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->room),f,true))
15569 {
15570 return qe_invalid;
15571 }
15572
15573
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->item),f,true))
15574 {
15575 return qe_invalid;
15576 }
15577
15578
2/6
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 128520 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if(Header->zelda_version < 0x211 || (Header->zelda_version == 0x211 && Header->build < 14))
15579 {
15580 temp_mapscr->hasitem = (temp_mapscr->item != 0) ? 1 : 0;
15581 }
15582 else
15583 {
15584
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->hasitem),f,true))
15585 return qe_invalid;
15586 }
15587
15588
1/4
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
128520 if((Header->zelda_version < 0x192)||
15589
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 ((Header->zelda_version == 0x192)&&(Header->build<154)))
15590 {
15591 if(!p_getc(&tempbyte,f,true))
15592 {
15593 return qe_invalid;
15594 }
15595 }
15596
15597
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->tilewarptype[0]),f,true))
15598 {
15599 return qe_invalid;
15600 }
15601
15602
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(Header->zelda_version < 0x193)
15603 {
15604 if(!p_getc(&tempbyte,f,true))
15605 {
15606 return qe_invalid;
15607 }
15608 }
15609
15610
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
15611 {
15612
2/2
✓ Branch 0 taken 385560 times.
✓ Branch 1 taken 128520 times.
514080 for(int32_t i=1; i<4; i++)
15613 {
15614
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 385560 times.
385560 if(!p_getc(&(temp_mapscr->tilewarptype[i]),f,true))
15615 {
15616 return qe_invalid;
15617 }
15618 385560 }
15619 128520 }
15620 else
15621 {
15622 temp_mapscr->tilewarptype[1]=0;
15623 temp_mapscr->tilewarptype[2]=0;
15624 temp_mapscr->tilewarptype[3]=0;
15625 }
15626
15627
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>153)))
15628 {
15629
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_igetw(&(temp_mapscr->door_combo_set),f,true))
15630 {
15631 return qe_invalid;
15632 }
15633 128520 }
15634
15635
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->warpreturnx[0]),f,true))
15636 {
15637 return qe_invalid;
15638 }
15639
15640 128520 temp_mapscr->warpreturnx[1]=0;
15641 128520 temp_mapscr->warpreturnx[2]=0;
15642 128520 temp_mapscr->warpreturnx[3]=0;
15643
15644
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
15645 {
15646
2/2
✓ Branch 0 taken 385560 times.
✓ Branch 1 taken 128520 times.
514080 for(int32_t i=1; i<4; i++)
15647 {
15648
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 385560 times.
385560 if(!p_getc(&(temp_mapscr->warpreturnx[i]),f,true))
15649 {
15650 return qe_invalid;
15651 }
15652 385560 }
15653 128520 }
15654
15655
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->warpreturny[0]),f,true))
15656 {
15657 return qe_invalid;
15658 }
15659
15660 128520 temp_mapscr->warpreturny[1]=0;
15661 128520 temp_mapscr->warpreturny[2]=0;
15662 128520 temp_mapscr->warpreturny[3]=0;
15663
15664
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
15665 {
15666
2/2
✓ Branch 0 taken 385560 times.
✓ Branch 1 taken 128520 times.
514080 for(int32_t i=1; i<4; i++)
15667 {
15668
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 385560 times.
385560 if(!p_getc(&(temp_mapscr->warpreturny[i]),f,true))
15669 {
15670 return qe_invalid;
15671 }
15672 385560 }
15673
15674
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(version>=18)
15675 {
15676
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_igetw(&temp_mapscr->warpreturnc,f,true))
15677 {
15678 return qe_invalid;
15679 }
15680 128520 }
15681 else
15682 {
15683 byte temp;
15684
15685 if(!p_getc(&temp,f,true))
15686 {
15687 return qe_invalid;
15688 }
15689
15690 temp_mapscr->warpreturnc=temp<<8|temp;
15691 }
15692 128520 }
15693
15694
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->stairx),f,true))
15695
15696 {
15697 return qe_invalid;
15698 }
15699
15700
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->stairy),f,true))
15701 {
15702 return qe_invalid;
15703 }
15704
15705
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->itemx),f,true))
15706 {
15707 return qe_invalid;
15708 }
15709
15710
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->itemy),f,true))
15711 {
15712 return qe_invalid;
15713 }
15714
15715
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(version > 15) // February 2009
15716 {
15717
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_igetw(&(temp_mapscr->color),f,true))
15718 {
15719 return qe_invalid;
15720 }
15721 128520 }
15722 else
15723 {
15724 if(!p_getc(& tempbyte,f,true))
15725 {
15726 return qe_invalid;
15727 }
15728
15729 temp_mapscr->color = (word) tempbyte;
15730 }
15731
15732
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->enemyflags),f,true))
15733 {
15734 return qe_invalid;
15735 }
15736
15737
2/2
✓ Branch 0 taken 514080 times.
✓ Branch 1 taken 128520 times.
642600 for(int32_t k=0; k<4; k++)
15738 {
15739
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 514080 times.
514080 if(!p_getc(&(temp_mapscr->door[k]),f,true))
15740 {
15741 return qe_invalid;
15742
15743 }
15744 514080 }
15745
15746
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(version <= 11)
15747 {
15748 if(!p_getc(&(tempbyte),f,true))
15749 {
15750 return qe_invalid;
15751 }
15752
15753 temp_mapscr->tilewarpdmap[0]=(word)tempbyte;
15754
15755 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
15756 {
15757 for(int32_t i=1; i<4; i++)
15758 {
15759 if(!p_getc(&(tempbyte),f,true))
15760 {
15761 return qe_invalid;
15762 }
15763
15764 temp_mapscr->tilewarpdmap[i]=(word)tempbyte;
15765 }
15766 }
15767 else
15768 {
15769 temp_mapscr->tilewarpdmap[1]=0;
15770 temp_mapscr->tilewarpdmap[2]=0;
15771 temp_mapscr->tilewarpdmap[3]=0;
15772 }
15773 }
15774 else
15775 {
15776
2/2
✓ Branch 0 taken 514080 times.
✓ Branch 1 taken 128520 times.
642600 for(int32_t i=0; i<4; i++)
15777 {
15778
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 514080 times.
514080 if(!p_igetw(&(temp_mapscr->tilewarpdmap[i]),f,true))
15779 {
15780 return qe_invalid;
15781 }
15782 514080 }
15783 }
15784
15785
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->tilewarpscr[0]),f,true))
15786 {
15787 return qe_invalid;
15788 }
15789
15790
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
15791 {
15792
2/2
✓ Branch 0 taken 385560 times.
✓ Branch 1 taken 128520 times.
514080 for(int32_t i=1; i<4; i++)
15793 {
15794
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 385560 times.
385560 if(!p_getc(&(temp_mapscr->tilewarpscr[i]),f,true))
15795 {
15796 return qe_invalid;
15797 }
15798 385560 }
15799 128520 }
15800 else
15801 {
15802 temp_mapscr->tilewarpscr[1]=0;
15803 temp_mapscr->tilewarpscr[2]=0;
15804 temp_mapscr->tilewarpscr[3]=0;
15805 }
15806
15807
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(version >= 15)
15808 {
15809
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->tilewarpoverlayflags),f,true))
15810 {
15811 return qe_invalid;
15812 }
15813 128520 }
15814 else
15815 {
15816 temp_mapscr->tilewarpoverlayflags=0;
15817 }
15818
15819
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->exitdir),f,true))
15820 {
15821 return qe_invalid;
15822 }
15823
15824
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(Header->zelda_version < 0x193)
15825 {
15826 if(!p_getc(&tempbyte,f,true))
15827 {
15828 return qe_invalid;
15829 }
15830
15831 }
15832
15833
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version == 0x192)&&(Header->build>145)&&(Header->build<154))
15834 {
15835 if(!p_getc(&padding,f,true))
15836 {
15837 return qe_invalid;
15838 }
15839 }
15840
15841
2/2
✓ Branch 0 taken 1285200 times.
✓ Branch 1 taken 128520 times.
1413720 for(int32_t k=0; k<10; k++)
15842 {
15843 /*
15844 if (!temp_mapscr->enemy[k])
15845 {
15846 continue;
15847 }
15848 */
15849
2/6
✓ Branch 0 taken 1285200 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1285200 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
1285200 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<10)))
15850 {
15851 if(!p_getc(&tempbyte,f,true))
15852 {
15853 return qe_invalid;
15854 }
15855
15856 temp_mapscr->enemy[k]=tempbyte;
15857 }
15858 else
15859 {
15860
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1285200 times.
1285200 if(!p_igetw(&(temp_mapscr->enemy[k]),f,true))
15861 {
15862 return qe_invalid;
15863 }
15864 }
15865
15866
2/6
✓ Branch 0 taken 1285200 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1285200 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
1285200 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<108)))
15867 {
15868 //using enumerations here is dangerous
15869 //very easy to break old quests -DD
15870 if(temp_mapscr->enemy[k]>=57) //old eGOHMA1
15871 {
15872 temp_mapscr->enemy[k]+=5;
15873 }
15874 else if(temp_mapscr->enemy[k]>=52) //old eGLEEOK2
15875 {
15876 temp_mapscr->enemy[k]+=1;
15877 }
15878 }
15879
15880
1/2
✓ Branch 0 taken 1285200 times.
✗ Branch 1 not taken.
1285200 if(version < 9)
15881 {
15882 if(temp_mapscr->enemy[k]>0)
15883 {
15884 temp_mapscr->enemy[k]+=10;
15885 }
15886 }
15887 //don't read in any invalid data
15888
1/2
✓ Branch 0 taken 1285200 times.
✗ Branch 1 not taken.
1285200 if ( ((unsigned)temp_mapscr->enemy[k]) > MAXGUYS )
15889 {
15890 al_trace("Tried to read an invalid enemy ID (%d) for tmpscr->enemy[%d]. This has been cleared to 0.\n", temp_mapscr->enemy[k], k);
15891 temp_mapscr->enemy[k] = 0;
15892 }
15893 1285200 }
15894
15895
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->pattern),f,true))
15896 {
15897 return qe_invalid;
15898 }
15899
15900
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->sidewarptype[0]),f,true))
15901 {
15902 return qe_invalid;
15903 }
15904
15905
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
15906 {
15907
2/2
✓ Branch 0 taken 385560 times.
✓ Branch 1 taken 128520 times.
514080 for(int32_t i=1; i<4; i++)
15908 {
15909
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 385560 times.
385560 if(!p_getc(&(temp_mapscr->sidewarptype[i]),f,true))
15910 {
15911 return qe_invalid;
15912 }
15913 385560 }
15914 128520 }
15915 else
15916 {
15917 temp_mapscr->sidewarptype[1]=0;
15918 temp_mapscr->sidewarptype[2]=0;
15919 temp_mapscr->sidewarptype[3]=0;
15920 }
15921
15922
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(version >= 15)
15923 {
15924
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->sidewarpoverlayflags),f,true))
15925 {
15926 return qe_invalid;
15927 }
15928 128520 }
15929 else
15930 {
15931 temp_mapscr->sidewarpoverlayflags=0;
15932 }
15933
15934
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->warparrivalx),f,true))
15935 {
15936 return qe_invalid;
15937 }
15938
15939
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->warparrivaly),f,true))
15940 {
15941 return qe_invalid;
15942 }
15943
15944
2/2
✓ Branch 0 taken 514080 times.
✓ Branch 1 taken 128520 times.
642600 for(int32_t k=0; k<4; k++)
15945 {
15946
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 514080 times.
514080 if(!p_getc(&(temp_mapscr->path[k]),f,true))
15947 {
15948 return qe_invalid;
15949 }
15950 514080 }
15951
15952
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->sidewarpscr[0]),f,true))
15953 {
15954 return qe_invalid;
15955 }
15956
15957
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
15958 {
15959
2/2
✓ Branch 0 taken 128520 times.
✓ Branch 1 taken 385560 times.
514080 for(int32_t i=1; i<4; i++)
15960 {
15961
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 385560 times.
385560 if(!p_getc(&(temp_mapscr->sidewarpscr[i]),f,true))
15962 {
15963 return qe_invalid;
15964 }
15965 385560 }
15966 128520 }
15967 else
15968 {
15969 temp_mapscr->sidewarpscr[1]=0;
15970 temp_mapscr->sidewarpscr[2]=0;
15971 temp_mapscr->sidewarpscr[3]=0;
15972 }
15973
15974
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(version <= 11)
15975 {
15976 if(!p_getc(&(tempbyte),f,true))
15977 {
15978 return qe_invalid;
15979 }
15980
15981 temp_mapscr->sidewarpdmap[0]=(word)tempbyte;
15982
15983 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
15984 {
15985 for(int32_t i=1; i<4; i++)
15986 {
15987 if(!p_getc(&(tempbyte),f,true))
15988 {
15989 return qe_invalid;
15990 }
15991
15992 temp_mapscr->sidewarpdmap[i]=(word)tempbyte;
15993 }
15994 }
15995 else
15996 {
15997 temp_mapscr->sidewarpdmap[1]=0;
15998 temp_mapscr->sidewarpdmap[2]=0;
15999 temp_mapscr->sidewarpdmap[3]=0;
16000 }
16001 }
16002 else
16003 {
16004
2/2
✓ Branch 0 taken 514080 times.
✓ Branch 1 taken 128520 times.
642600 for(int32_t i=0; i<4; i++)
16005 {
16006
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 514080 times.
514080 if(!p_igetw(&(temp_mapscr->sidewarpdmap[i]),f,true))
16007 {
16008 return qe_invalid;
16009 }
16010 514080 }
16011 }
16012
16013
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
16014 {
16015
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->sidewarpindex),f,true))
16016 {
16017 return qe_invalid;
16018 }
16019 128520 }
16020 else temp_mapscr->sidewarpindex = 0;
16021
16022
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_igetw(&(temp_mapscr->undercombo),f,true))
16023 {
16024 return qe_invalid;
16025 }
16026
16027
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(Header->zelda_version < 0x193)
16028 {
16029 if(!p_getc(&(temp_mapscr->old_cpage),f,true))
16030 {
16031 return qe_invalid;
16032 }
16033 }
16034
16035
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->undercset),f,true)) //recalculated for older quests
16036 {
16037 return qe_invalid;
16038 }
16039
16040
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_igetw(&(temp_mapscr->catchall),f,true))
16041 {
16042 return qe_invalid;
16043 }
16044
16045
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->flags),f,true))
16046 {
16047 return qe_invalid;
16048 }
16049
16050
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->flags2),f,true))
16051 {
16052 return qe_invalid;
16053 }
16054
16055
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->flags3),f,true))
16056 {
16057 return qe_invalid;
16058 }
16059
16060
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>1)))
16061 //if (version>2)
16062 {
16063
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->flags4),f,true))
16064 {
16065 return qe_invalid;
16066 }
16067 128520 }
16068
16069
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
16070 {
16071
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->flags5),f,true))
16072 {
16073 return qe_invalid;
16074 }
16075
16076
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_igetw(&(temp_mapscr->noreset),f,true))
16077 {
16078 return qe_invalid;
16079 }
16080
16081
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_igetw(&(temp_mapscr->nocarry),f,true))
16082 {
16083 return qe_invalid;
16084 }
16085
16086
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(temp_mapscr->flags5&32)
16087 {
16088 temp_mapscr->flags5 &= ~32;
16089 temp_mapscr->noreset |= 48;
16090 }
16091
16092
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(version<8)
16093 {
16094 if(temp_mapscr->noreset&1)
16095 {
16096 temp_mapscr->noreset|=8192;
16097 }
16098
16099 if(temp_mapscr->nocarry&1)
16100 {
16101 temp_mapscr->nocarry|=8192;
16102 temp_mapscr->nocarry&=~1;
16103 }
16104 }
16105 128520 }
16106 else
16107 {
16108 temp_mapscr->flags5 = 0;
16109 temp_mapscr->noreset = 0;
16110 temp_mapscr->nocarry = 0;
16111 }
16112
16113
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>9)))
16114 {
16115
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->flags6),f,true))
16116 {
16117 return qe_invalid;
16118 }
16119 128520 }
16120
16121
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(version>5)
16122 {
16123
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->flags7),f,true))
16124 {
16125 return qe_invalid;
16126 }
16127
16128
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->flags8),f,true))
16129 {
16130 return qe_invalid;
16131 }
16132
16133
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->flags9),f,true))
16134 {
16135 return qe_invalid;
16136 }
16137
16138
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->flags10),f,true))
16139 {
16140 return qe_invalid;
16141 }
16142
16143
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->csensitive),f,true))
16144 {
16145 return qe_invalid;
16146 }
16147 128520 }
16148 else
16149 {
16150 temp_mapscr->csensitive=1;
16151 }
16152
16153
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(version<14) // August 2007: screen SFX added
16154 {
16155 if(temp_mapscr->flags&8) //fROAR
16156 {
16157 temp_mapscr->bosssfx=
16158 (temp_mapscr->flags3&2) ? WAV_DODONGO : // fDODONGO
16159 (temp_mapscr->flags2&32) ? WAV_VADER : // fVADER
16160 WAV_ROAR;
16161 }
16162
16163 if(temp_mapscr->flags&128) //fSEA
16164 {
16165 temp_mapscr->oceansfx=WAV_SEA;
16166 }
16167
16168 if(!(temp_mapscr->flags3&64)) //fNOSECRETSOUND
16169 {
16170 temp_mapscr->secretsfx=WAV_SECRET;
16171 }
16172
16173 temp_mapscr->flags3 &= ~66; //64|2
16174 temp_mapscr->flags2 &= ~32;
16175 temp_mapscr->flags &= ~136; // 128|8
16176 }
16177 else
16178 {
16179
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->oceansfx),f,true))
16180 {
16181 return qe_invalid;
16182 }
16183
16184
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->bosssfx),f,true))
16185 {
16186 return qe_invalid;
16187 }
16188
16189
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->secretsfx),f,true))
16190 {
16191 return qe_invalid;
16192 }
16193 }
16194
16195
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(version<15) // October 2007: another SFX
16196 {
16197 temp_mapscr->holdupsfx=WAV_PICKUP;
16198 }
16199 else
16200 {
16201
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->holdupsfx),f,true))
16202 {
16203 return qe_invalid;
16204 }
16205 }
16206
16207
16208
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>97)))
16209 {
16210
2/2
✓ Branch 0 taken 771120 times.
✓ Branch 1 taken 128520 times.
899640 for(int32_t k=0; k<6; k++)
16211 {
16212
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 771120 times.
771120 if(!p_getc(&(temp_mapscr->layermap[k]),f,true))
16213 {
16214 return qe_invalid;
16215 }
16216 771120 }
16217
16218
2/2
✓ Branch 0 taken 128520 times.
✓ Branch 1 taken 771120 times.
899640 for(int32_t k=0; k<6; k++)
16219 {
16220
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 771120 times.
771120 if(!p_getc(&(temp_mapscr->layerscreen[k]),f,true))
16221 {
16222 return qe_invalid;
16223 }
16224 771120 }
16225 128520 }
16226 else if((Header->zelda_version == 0x192)&&(Header->build>23)&&(Header->build<98))
16227 {
16228 if(!p_getc(&(temp_mapscr->layermap[2]),f,true))
16229 {
16230 return qe_invalid;
16231 }
16232
16233 if(!p_getc(&(temp_mapscr->layerscreen[2]),f,true))
16234 {
16235 return qe_invalid;
16236 }
16237
16238 if(!p_getc(&(temp_mapscr->layermap[4]),f,true))
16239 {
16240 return qe_invalid;
16241 }
16242
16243 if(!p_getc(&(temp_mapscr->layerscreen[4]),f,true))
16244
16245 {
16246 return qe_invalid;
16247 }
16248 }
16249
16250
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
128520 if((Header->zelda_version == 0x192)&&(Header->build>149))
16251 {
16252 for(int32_t k=0; k<6; k++)
16253 {
16254 if(!p_getc(&tempbyte,f,true)) //layerxsize
16255 {
16256 return qe_invalid;
16257 }
16258 }
16259
16260 for(int32_t k=0; k<6; k++)
16261 {
16262 if(!p_getc(&tempbyte,f,true)) //layerxspeed
16263 {
16264 return qe_invalid;
16265 }
16266 }
16267
16268 for(int32_t k=0; k<6; k++)
16269 {
16270 if(!p_getc(&tempbyte,f,true)) //layerxdelay
16271 {
16272 return qe_invalid;
16273 }
16274 }
16275
16276 for(int32_t k=0; k<6; k++)
16277 {
16278 if(!p_getc(&tempbyte,f,true)) //layerysize
16279 {
16280 return qe_invalid;
16281 }
16282 }
16283
16284 for(int32_t k=0; k<6; k++)
16285 {
16286 if(!p_getc(&tempbyte,f,true)) //layeryspeed
16287 {
16288 return qe_invalid;
16289 }
16290 }
16291
16292 for(int32_t k=0; k<6; k++)
16293 {
16294 if(!p_getc(&tempbyte,f,true)) //layerydelay
16295 {
16296 return qe_invalid;
16297 }
16298 }
16299 }
16300
16301
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>149)))
16302 {
16303
2/2
✓ Branch 0 taken 771120 times.
✓ Branch 1 taken 128520 times.
899640 for(int32_t k=0; k<6; k++)
16304 {
16305
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 771120 times.
771120 if(!p_getc(&(temp_mapscr->layeropacity[k]),f,true))
16306 {
16307 return qe_invalid;
16308 }
16309 771120 }
16310 128520 }
16311
16312
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>153)))
16313 {
16314
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
128520 if((Header->zelda_version == 0x192)&&(Header->build>153))
16315 {
16316 if(!p_getc(&padding,f,true))
16317 {
16318 return qe_invalid;
16319 }
16320 }
16321
16322
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_igetw(&(temp_mapscr->timedwarptics),f,true))
16323 {
16324 return qe_invalid;
16325 }
16326 128520 }
16327
16328
2/6
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 128520 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<24)))
16329 {
16330 extras=15;
16331 }
16332
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
128520 else if(((Header->zelda_version == 0x192)&&(Header->build<98)))
16333 {
16334 extras=11;
16335 }
16336
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
128520 else if((Header->zelda_version == 0x192)&&(Header->build<150))
16337 {
16338 extras=32;
16339 }
16340
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
128520 else if((Header->zelda_version == 0x192)&&(Header->build<154))
16341 {
16342 extras=64;
16343 }
16344
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 else if(Header->zelda_version < 0x193)
16345 {
16346 extras=62;
16347 }
16348 else
16349
16350 {
16351 128520 extras=0;
16352 }
16353
16354
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 for(int32_t k=0; k<extras; k++)
16355 {
16356 if(!p_getc(&tempbyte,f,true)) //extra[k]
16357 {
16358 return qe_invalid;
16359 }
16360 }
16361
16362
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>2)))
16363 //if (version>3)
16364 {
16365
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_getc(&(temp_mapscr->nextmap),f,true))
16366 {
16367 return qe_invalid;
16368 }
16369
16370
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->nextscr),f,true))
16371 {
16372 return qe_invalid;
16373 }
16374 128520 }
16375 else
16376 {
16377 temp_mapscr->nextmap=0;
16378 temp_mapscr->nextscr=0;
16379 }
16380
16381
2/6
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 128520 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<137)))
16382 {
16383 secretcombos=20;
16384 }
16385
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
128520 else if((Header->zelda_version == 0x192)&&(Header->build<154))
16386 {
16387 secretcombos=256;
16388 }
16389 else
16390 {
16391 128520 secretcombos=128;
16392 }
16393
16394
2/6
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 128520 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<154)))
16395 {
16396 for(int32_t k=0; k<secretcombos; k++)
16397 {
16398 if(!p_getc(&tempbyte,f,true))
16399 {
16400 return qe_invalid;
16401 }
16402
16403 if(k<128)
16404 {
16405 temp_mapscr->secretcombo[k]=tempbyte;
16406 }
16407 }
16408 }
16409 else
16410 {
16411
2/2
✓ Branch 0 taken 16450560 times.
✓ Branch 1 taken 128520 times.
16579080 for(int32_t k=0; k<128; k++)
16412 {
16413
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16450560 times.
16450560 if(!p_igetw(&(temp_mapscr->secretcombo[k]),f,true))
16414 {
16415 return qe_invalid;
16416 }
16417
16418 16450560 }
16419 }
16420
16421
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>153)))
16422 {
16423
2/2
✓ Branch 0 taken 16450560 times.
✓ Branch 1 taken 128520 times.
16579080 for(int32_t k=0; k<128; k++)
16424 {
16425
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16450560 times.
16450560 if(!p_getc(&(temp_mapscr->secretcset[k]),f,true))
16426 {
16427 return qe_invalid;
16428 }
16429 16450560 }
16430
16431
2/2
✓ Branch 0 taken 16450560 times.
✓ Branch 1 taken 128520 times.
16579080 for(int32_t k=0; k<128; k++)
16432 {
16433
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16450560 times.
16450560 if(!p_getc(&(temp_mapscr->secretflag[k]),f,true))
16434 {
16435 return qe_invalid;
16436 }
16437 16450560 }
16438 128520 }
16439
16440
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version == 0x192)&&(Header->build>97)&&(Header->build<154))
16441 {
16442 if(!p_getc(&padding,f,true))
16443 {
16444 return qe_invalid;
16445 }
16446 }
16447
16448 128520 const int32_t _mapsSize = (temp_map->tileWidth*temp_map->tileHeight);
16449
16450
2/2
✓ Branch 0 taken 22619520 times.
✓ Branch 1 taken 128520 times.
22748040 for(int32_t k=0; k<(temp_map->tileWidth*temp_map->tileHeight); k++)
16451 {
16452
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 22619520 times.
22619520 if(!p_igetw(&(temp_mapscr->data[k]),f,true))
16453 {
16454 return qe_invalid;
16455 }
16456 22619520 }
16457
16458
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version == 0x192)&&(Header->build>20)&&(Header->build<24))
16459 {
16460 if(!p_getc(&padding,f,true))
16461 {
16462 return qe_invalid;
16463 }
16464
16465 if(!p_getc(&padding,f,true))
16466 {
16467 return qe_invalid;
16468 }
16469 }
16470
16471
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>20)))
16472 {
16473
2/2
✓ Branch 0 taken 22619520 times.
✓ Branch 1 taken 128520 times.
22748040 for(int32_t k=0; k<(temp_map->tileWidth*temp_map->tileHeight); k++)
16474 {
16475
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 22619520 times.
22619520 if(!p_getc(&(temp_mapscr->sflag[k]),f,true))
16476 {
16477 return qe_invalid;
16478 }
16479
16480
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 22619520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
22619520 if((Header->zelda_version == 0x192)&&(Header->build<24))
16481 {
16482 if(!p_getc(&tempbyte,f,true))
16483 {
16484 return qe_invalid;
16485 }
16486
16487 if(!p_getc(&tempbyte,f,true))
16488 {
16489 return qe_invalid;
16490 }
16491
16492 if(!p_getc(&tempbyte,f,true))
16493 {
16494 return qe_invalid;
16495 }
16496 }
16497 22619520 }
16498 128520 }
16499
16500
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>97)))
16501 {
16502
2/2
✓ Branch 0 taken 128520 times.
✓ Branch 1 taken 22619520 times.
22748040 for(int32_t k=0; k<(temp_map->tileWidth*temp_map->tileHeight); k++)
16503 {
16504
16505
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 22619520 times.
22619520 if(!p_getc(&(temp_mapscr->cset[k]),f,true))
16506 {
16507 return qe_invalid;
16508 }
16509 22619520 }
16510 128520 }
16511
16512
2/6
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 128520 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<154)))
16513 {
16514 temp_mapscr->undercset=(temp_mapscr->undercombo>>8)&7;
16515 temp_mapscr->undercombo=(temp_mapscr->undercombo&0xFF)+(temp_mapscr->old_cpage<<8);
16516 }
16517
16518
2/6
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 128520 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<137)))
16519 {
16520 temp_mapscr->secretcombo[sSBOMB]=temp_mapscr->secretcombo[sBOMB];
16521 temp_mapscr->secretcombo[sRCANDLE]=temp_mapscr->secretcombo[sBCANDLE];
16522 temp_mapscr->secretcombo[sWANDFIRE]=temp_mapscr->secretcombo[sBCANDLE];
16523 temp_mapscr->secretcombo[sDINSFIRE]=temp_mapscr->secretcombo[sBCANDLE];
16524 temp_mapscr->secretcombo[sSARROW]=temp_mapscr->secretcombo[sARROW];
16525 temp_mapscr->secretcombo[sGARROW]=temp_mapscr->secretcombo[sARROW];
16526 }
16527
16528
2/6
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 128520 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128520 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<154)))
16529 {
16530 for(int32_t k=0; k<(temp_map->tileWidth*temp_map->tileHeight); k++)
16531 {
16532 if((Header->zelda_version == 0x192)&&(Header->build>149))
16533 {
16534 if((Header->zelda_version == 0x192)&&(Header->build!=153))
16535 {
16536 temp_mapscr->cset[k]=((temp_mapscr->data[k]>>8)&7);
16537 }
16538 }
16539 else
16540 {
16541 if((Header->zelda_version < 0x192)||
16542 ((Header->zelda_version == 0x192)&&(Header->build<21)))
16543 {
16544 temp_mapscr->sflag[k]=(temp_mapscr->data[k]>>11);
16545 }
16546
16547 temp_mapscr->cset[k]=((temp_mapscr->data[k]>>8)&7);
16548 }
16549
16550 temp_mapscr->data[k]=(temp_mapscr->data[k]&0xFF)+(temp_mapscr->old_cpage<<8);
16551 }
16552 }
16553
16554 /*if(version>12)
16555 {
16556 if(!p_getc(&(temp_mapscr->scrWidth),f,true))
16557 {
16558 return qe_invalid;
16559 }
16560 if(!p_getc(&(temp_mapscr->scrHeight),f,true))
16561 {
16562 return qe_invalid;
16563 }
16564 }*/
16565
16566
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(version>4)
16567 {
16568
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_igetw(&(temp_mapscr->screen_midi),f,true))
16569 {
16570 return qe_invalid;
16571 }
16572 128520 }
16573 else
16574 {
16575 temp_mapscr->screen_midi = -1;
16576 }
16577
16578
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(version>=17)
16579 {
16580
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(!p_getc(&(temp_mapscr->lens_layer),f,true))
16581 {
16582 return qe_invalid;
16583 }
16584 128520 }
16585 else
16586 {
16587 temp_mapscr->lens_layer = llNORMAL;
16588 }
16589
16590
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(version>6)
16591 {
16592 dword bits;
16593
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 128520 times.
128520 if(!p_igetl(&bits,f,true))
16594 {
16595 return qe_invalid;
16596 }
16597
16598 int32_t m;
16599 float tempfloat;
16600 word tempw;
16601 128520 temp_mapscr->ffcCountMarkDirty();
16602
16603
2/2
✓ Branch 0 taken 128520 times.
✓ Branch 1 taken 4112640 times.
4241160 for(m=0; m<32; m++)
16604 {
16605 4112640 ffcdata& tempffc = temp_mapscr->ffcs[m];
16606 4112640 tempffc.clear();
16607
2/2
✓ Branch 0 taken 4101938 times.
✓ Branch 1 taken 10702 times.
4112640 if((bits>>m)&1)
16608 {
16609
1/2
✓ Branch 0 taken 10702 times.
✗ Branch 1 not taken.
10702 if(!p_igetw(&tempw,f,true))
16610 {
16611 return qe_invalid;
16612 }
16613 10702 tempffc.setData(tempw);
16614
16615
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_getc(&(tempffc.cset),f,true))
16616 {
16617 return qe_invalid;
16618 }
16619
16620
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_igetw(&(tempffc.delay),f,true))
16621 {
16622 return qe_invalid;
16623 }
16624
16625
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(version < 9)
16626 {
16627 if(!p_igetf(&tempfloat,f,true))
16628 {
16629 return qe_invalid;
16630 }
16631
16632 tempffc.x=zslongToFix(int32_t(tempfloat*10000));
16633
16634 if(!p_igetf(&tempfloat,f,true))
16635 {
16636 return qe_invalid;
16637 }
16638
16639 tempffc.y=zslongToFix(int32_t(tempfloat*10000));
16640
16641 if(!p_igetf(&tempfloat,f,true))
16642 {
16643 return qe_invalid;
16644 }
16645
16646 tempffc.vx=zslongToFix(int32_t(tempfloat*10000));
16647
16648 if(!p_igetf(&tempfloat,f,true))
16649 {
16650 return qe_invalid;
16651 }
16652
16653 tempffc.vy=zslongToFix(int32_t(tempfloat*10000));
16654
16655 if(!p_igetf(&tempfloat,f,true))
16656 {
16657 return qe_invalid;
16658 }
16659
16660 tempffc.ax=zslongToFix(int32_t(tempfloat*10000));
16661
16662 if(!p_igetf(&tempfloat,f,true))
16663 {
16664 return qe_invalid;
16665 }
16666
16667 tempffc.ay=zslongToFix(int32_t(tempfloat*10000));
16668 }
16669 else
16670 {
16671
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_igetzf(&(tempffc.x),f,true))
16672 {
16673 return qe_invalid;
16674 }
16675
16676
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_igetzf(&(tempffc.y),f,true))
16677 {
16678 return qe_invalid;
16679 }
16680
16681
1/2
✓ Branch 0 taken 10702 times.
✗ Branch 1 not taken.
10702 if(!p_igetzf(&(tempffc.vx),f,true))
16682 {
16683 return qe_invalid;
16684 }
16685
16686
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_igetzf(&(tempffc.vy),f,true))
16687 {
16688 return qe_invalid;
16689 }
16690
16691
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_igetzf(&(tempffc.ax),f,true))
16692 {
16693 return qe_invalid;
16694 }
16695
16696
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_igetzf(&(tempffc.ay),f,true))
16697 {
16698 return qe_invalid;
16699 }
16700 }
16701
16702
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_getc(&(tempffc.link),f,true))
16703 {
16704 return qe_invalid;
16705 }
16706
16707
1/2
✓ Branch 0 taken 10702 times.
✗ Branch 1 not taken.
10702 if(version>7)
16708 {
16709
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_getc(&tempbyte,f,true))
16710 {
16711 return qe_invalid;
16712 }
16713
16714 10702 tempffc.hxsz = (tempbyte&0x3F)+1;
16715 10702 tempffc.txsz = (tempbyte>>6)+1;
16716
16717
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_getc(&tempbyte,f,true))
16718 {
16719 return qe_invalid;
16720 }
16721
16722 10702 tempffc.hysz = (tempbyte&0x3F)+1;
16723 10702 tempffc.tysz = (tempbyte>>6)+1;
16724
16725
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_igetl(&(tempffc.flags),f,true))
16726 {
16727 return qe_invalid;
16728 }
16729 10702 }
16730 else
16731 {
16732 tempffc.hxsz=16;
16733 tempffc.hysz=16;
16734 tempffc.txsz=1;
16735 tempffc.tysz=1;
16736 tempffc.flags=0;
16737 }
16738
16739 10702 tempffc.updateSolid();
16740
16741
16742
4/6
✓ Branch 0 taken 10702 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8682 times.
✓ Branch 3 taken 2020 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 8682 times.
10702 if(Header->zelda_version == 0x211 || (Header->zelda_version == 0x250 && Header->build<20))
16743 {
16744 tempffc.flags|=ffIGNOREHOLDUP;
16745 }
16746
16747
1/2
✓ Branch 0 taken 10702 times.
✗ Branch 1 not taken.
10702 if(version>9)
16748 {
16749
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_igetw(&(tempffc.script),f,true))
16750 {
16751 return qe_invalid;
16752 }
16753 10702 }
16754 else
16755 {
16756 tempffc.script=0;
16757 }
16758
16759
1/2
✓ Branch 0 taken 10702 times.
✗ Branch 1 not taken.
10702 if(version>10)
16760 {
16761
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_igetl(&(tempffc.initd[0]),f,true))
16762 {
16763 return qe_invalid;
16764 }
16765
16766
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_igetl(&(tempffc.initd[1]),f,true))
16767 {
16768 return qe_invalid;
16769 }
16770
16771
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_igetl(&(tempffc.initd[2]),f,true))
16772 {
16773 return qe_invalid;
16774 }
16775
16776
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_igetl(&(tempffc.initd[3]),f,true))
16777 {
16778 return qe_invalid;
16779 }
16780
16781
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_igetl(&(tempffc.initd[4]),f,true))
16782 {
16783 return qe_invalid;
16784 }
16785
16786
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_igetl(&(tempffc.initd[5]),f,true))
16787 {
16788 return qe_invalid;
16789 }
16790
16791
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_igetl(&(tempffc.initd[6]),f,true))
16792 {
16793 return qe_invalid;
16794 }
16795
16796
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_igetl(&(tempffc.initd[7]),f,true))
16797 {
16798 return qe_invalid;
16799 }
16800
16801
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_getc(&(tempbyte),f,true))
16802 {
16803 return qe_invalid;
16804 }
16805
16806 10702 tempffc.inita[0]=tempbyte*10000;
16807
16808
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10702 times.
10702 if(!p_getc(&(tempbyte),f,true))
16809 {
16810 return qe_invalid;
16811 }
16812
16813 10702 tempffc.inita[1]=tempbyte*10000;
16814 10702 }
16815 else
16816 {
16817 tempffc.inita[0] = 10000;
16818 tempffc.inita[1] = 10000;
16819 }
16820
16821 10702 tempffc.initialized = false;
16822
16823
1/2
✓ Branch 0 taken 10702 times.
✗ Branch 1 not taken.
10702 if(version <= 11)
16824 {
16825 fixffcs=true;
16826 }
16827 10702 }
16828 4112640 }
16829
16830 128520 }
16831
16832 //add in the new whistle flags
16833
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(version<13)
16834 {
16835 if(temp_mapscr->flags & fWHISTLE)
16836 {
16837 temp_mapscr->flags7 |= (fWHISTLEPAL | fWHISTLEWATER);
16838 }
16839 }
16840
16841 // for(int32_t m=0; m<32; m++)
16842 // {
16843 // // ffcScriptData used to be part of mapscr, and this was handled just above
16844 // ffcScriptData[m].a[0] = 10000;
16845 // ffcScriptData[m].a[1] = 10000;
16846 // }
16847
16848 //2.55 starts here
16849
3/4
✓ Branch 0 taken 13736 times.
✓ Branch 1 taken 114784 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 13736 times.
128520 if ( version >= 19 && Header->zelda_version > 0x253 )
16850 {
16851
2/2
✓ Branch 0 taken 137360 times.
✓ Branch 1 taken 13736 times.
151096 for ( int32_t q = 0; q < 10; q++ )
16852 {
16853
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 137360 times.
137360 if(!p_igetl(&(temp_mapscr->npcstrings[q]),f,true))
16854 {
16855 return qe_invalid;
16856 }
16857 137360 }
16858
2/2
✓ Branch 0 taken 137360 times.
✓ Branch 1 taken 13736 times.
151096 for ( int32_t q = 0; q < 10; q++ )
16859 {
16860
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 137360 times.
137360 if(!p_igetw(&(temp_mapscr->new_items[q]),f,true))
16861 {
16862 return qe_invalid;
16863 }
16864 137360 }
16865
2/2
✓ Branch 0 taken 137360 times.
✓ Branch 1 taken 13736 times.
151096 for ( int32_t q = 0; q < 10; q++ )
16866 {
16867
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 137360 times.
137360 if(!p_igetw(&(temp_mapscr->new_item_x[q]),f,true))
16868 {
16869 return qe_invalid;
16870 }
16871 137360 }
16872
2/2
✓ Branch 0 taken 13736 times.
✓ Branch 1 taken 137360 times.
151096 for ( int32_t q = 0; q < 10; q++ )
16873 {
16874
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 137360 times.
137360 if(!p_igetw(&(temp_mapscr->new_item_y[q]),f,true))
16875 {
16876 return qe_invalid;
16877 }
16878 137360 }
16879 13736 }
16880
3/4
✓ Branch 0 taken 114784 times.
✓ Branch 1 taken 13736 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 114784 times.
128520 if ( version < 19 && Header->zelda_version > 0x253 )
16881 {
16882 for ( int32_t q = 0; q < 10; q++ )
16883 {
16884 temp_mapscr->npcstrings[q] = 0;
16885 temp_mapscr->new_items[q] = 0;
16886 temp_mapscr->new_item_x[q] = 0;
16887 temp_mapscr->new_item_y[q] = 0;
16888 }
16889 }
16890
3/4
✓ Branch 0 taken 13736 times.
✓ Branch 1 taken 114784 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 13736 times.
128520 if ( version >= 20 && Header->zelda_version > 0x253 )
16891 {
16892
1/2
✓ Branch 0 taken 13736 times.
✗ Branch 1 not taken.
13736 if(!p_igetw(&(temp_mapscr->script),f,true))
16893 {
16894 return qe_invalid;
16895 }
16896
2/2
✓ Branch 0 taken 109888 times.
✓ Branch 1 taken 13736 times.
123624 for ( int32_t q = 0; q < 8; q++)
16897 {
16898
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 109888 times.
109888 if(!p_igetl(&(temp_mapscr->screeninitd[q]),f,true))
16899 {
16900 return qe_invalid;
16901 }
16902 109888 }
16903 13736 }
16904
2/2
✓ Branch 0 taken 13736 times.
✓ Branch 1 taken 114784 times.
128520 if ( version < 20 )
16905 {
16906 114784 temp_mapscr->script = 0;
16907
2/2
✓ Branch 0 taken 918272 times.
✓ Branch 1 taken 114784 times.
1033056 for ( int32_t q = 0; q < 8; q++) temp_mapscr->screeninitd[q] = 0;
16908 114784 }
16909
3/4
✓ Branch 0 taken 13736 times.
✓ Branch 1 taken 114784 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 13736 times.
128520 if ( version >= 21 && Header->zelda_version > 0x253 )
16910 {
16911
1/2
✓ Branch 0 taken 13736 times.
✗ Branch 1 not taken.
13736 if(!p_getc(&(temp_mapscr->preloadscript),f,true))
16912 {
16913 return qe_invalid;
16914 }
16915 13736 }
16916
2/2
✓ Branch 0 taken 114784 times.
✓ Branch 1 taken 13736 times.
128520 if ( version < 21 )
16917 {
16918 114784 temp_mapscr->preloadscript = 0;
16919 114784 }
16920 //all builds with version > 20 need this. -Z
16921 128520 temp_mapscr->ffcswaitdraw = 0;
16922
16923
3/4
✓ Branch 0 taken 13736 times.
✓ Branch 1 taken 114784 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 13736 times.
128520 if ( version >= 22 && Header->zelda_version > 0x253 ) //26th June, 2019; Layer Visibility
16924 {
16925
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 13736 times.
13736 if(!p_getc(&(temp_mapscr->hidelayers ),f,true))
16926 {
16927 return qe_invalid;
16928 }
16929
1/2
✓ Branch 0 taken 13736 times.
✗ Branch 1 not taken.
13736 if(!p_getc(&(temp_mapscr->hidescriptlayers ),f,true))
16930 {
16931 return qe_invalid;
16932 }
16933 13736 }
16934
2/2
✓ Branch 0 taken 114784 times.
✓ Branch 1 taken 13736 times.
128520 if ( version < 22 )
16935 {
16936 114784 temp_mapscr->hidelayers = 0;
16937 114784 temp_mapscr->hidescriptlayers = 0;
16938 114784 }
16939
16940 //Dodongos in 2.10 used the boss roar, not the dodongo sound. -Z
16941 //May be any version before 2.11. -Z
16942 /* --not the roar, the HIT SFX
16943 if ( Header->zelda_version <= 0x210 )
16944 {
16945 if ( temp_mapscr->bosssfx == WAV_DODONGO )
16946 {
16947 temp_mapscr->bosssfx = WAV_ROAR;
16948 }
16949 }
16950 */
16951
16952 128520 return 0;
16953 128520 }
16954 140080 int32_t readmapscreen(PACKFILE *f, zquestheader *Header, mapscr *temp_mapscr, zcmap *temp_map, word version)
16955 {
16956
2/2
✓ Branch 0 taken 128520 times.
✓ Branch 1 taken 11560 times.
140080 if(version < 23)
16957 {
16958 128520 auto ret = readmapscreen_old(f,Header,temp_mapscr,temp_map,version);
16959
1/2
✓ Branch 0 taken 128520 times.
✗ Branch 1 not taken.
128520 if(ret) return ret;
16960 128520 }
16961 else
16962 {
16963
1/2
✓ Branch 0 taken 11560 times.
✗ Branch 1 not taken.
11560 if(!p_getc(&(temp_mapscr->valid),f,true))
16964 return qe_invalid;
16965
2/2
✓ Branch 0 taken 4946 times.
✓ Branch 1 taken 6614 times.
11560 if(!(temp_mapscr->valid & mVALID))
16966 6614 return 0; //Empty screen
16967 uint32_t scr_has_flags;
16968
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4946 times.
4946 if(!p_igetl(&scr_has_flags,f,true))
16969 return qe_invalid;
16970
16971
2/2
✓ Branch 0 taken 4901 times.
✓ Branch 1 taken 45 times.
4946 if(scr_has_flags & SCRHAS_ROOMDATA)
16972 {
16973
1/2
✓ Branch 0 taken 45 times.
✗ Branch 1 not taken.
45 if(!p_getc(&(temp_mapscr->guy),f,true))
16974 return qe_invalid;
16975
1/2
✓ Branch 0 taken 45 times.
✗ Branch 1 not taken.
45 if(!p_igetw(&(temp_mapscr->str),f,true))
16976 return qe_invalid;
16977
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 45 times.
45 if(!p_getc(&(temp_mapscr->room),f,true))
16978 return qe_invalid;
16979
1/2
✓ Branch 0 taken 45 times.
✗ Branch 1 not taken.
45 if(!p_igetw(&(temp_mapscr->catchall),f,true))
16980 return qe_invalid;
16981 45 }
16982
2/2
✓ Branch 0 taken 4866 times.
✓ Branch 1 taken 80 times.
4946 if(scr_has_flags & SCRHAS_ITEM)
16983 {
16984
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&(temp_mapscr->item),f,true))
16985 return qe_invalid;
16986
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if(!p_getc(&(temp_mapscr->hasitem),f,true))
16987 return qe_invalid;
16988
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&(temp_mapscr->itemx),f,true))
16989 return qe_invalid;
16990
1/2
✓ Branch 0 taken 80 times.
✗ Branch 1 not taken.
80 if(!p_getc(&(temp_mapscr->itemy),f,true))
16991 return qe_invalid;
16992 80 }
16993
2/2
✓ Branch 0 taken 4658 times.
✓ Branch 1 taken 288 times.
4946 if(scr_has_flags & (SCRHAS_SWARP|SCRHAS_TWARP))
16994 {
16995
1/2
✓ Branch 0 taken 288 times.
✗ Branch 1 not taken.
288 if(!p_igetw(&temp_mapscr->warpreturnc,f,true))
16996 return qe_invalid;
16997 288 }
16998
2/2
✓ Branch 0 taken 4748 times.
✓ Branch 1 taken 198 times.
4946 if(scr_has_flags & SCRHAS_TWARP)
16999 {
17000
2/2
✓ Branch 0 taken 792 times.
✓ Branch 1 taken 198 times.
990 for(int32_t i=0; i<4; i++)
17001 {
17002
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 792 times.
792 if(!p_getc(&(temp_mapscr->tilewarptype[i]),f,true))
17003 return qe_invalid;
17004 792 }
17005
2/2
✓ Branch 0 taken 792 times.
✓ Branch 1 taken 198 times.
990 for(int32_t i=0; i<4; i++)
17006 {
17007
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 792 times.
792 if(!p_igetw(&(temp_mapscr->tilewarpdmap[i]),f,true))
17008 return qe_invalid;
17009 792 }
17010
2/2
✓ Branch 0 taken 792 times.
✓ Branch 1 taken 198 times.
990 for(int32_t i=0; i<4; i++)
17011 {
17012
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 792 times.
792 if(!p_getc(&(temp_mapscr->tilewarpscr[i]),f,true))
17013 return qe_invalid;
17014 792 }
17015
1/2
✓ Branch 0 taken 198 times.
✗ Branch 1 not taken.
198 if(!p_getc(&(temp_mapscr->tilewarpoverlayflags),f,true))
17016 return qe_invalid;
17017 198 }
17018
2/2
✓ Branch 0 taken 4832 times.
✓ Branch 1 taken 114 times.
4946 if(scr_has_flags & SCRHAS_SWARP)
17019 {
17020
2/2
✓ Branch 0 taken 456 times.
✓ Branch 1 taken 114 times.
570 for(int32_t i=0; i<4; i++)
17021 {
17022
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 456 times.
456 if(!p_getc(&(temp_mapscr->sidewarptype[i]),f,true))
17023 return qe_invalid;
17024 456 }
17025
2/2
✓ Branch 0 taken 456 times.
✓ Branch 1 taken 114 times.
570 for(int32_t i=0; i<4; i++)
17026 {
17027
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 456 times.
456 if(!p_igetw(&(temp_mapscr->sidewarpdmap[i]),f,true))
17028 return qe_invalid;
17029 456 }
17030
2/2
✓ Branch 0 taken 456 times.
✓ Branch 1 taken 114 times.
570 for(int32_t i=0; i<4; i++)
17031 {
17032
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 456 times.
456 if(!p_getc(&(temp_mapscr->sidewarpscr[i]),f,true))
17033 return qe_invalid;
17034 456 }
17035
1/2
✓ Branch 0 taken 114 times.
✗ Branch 1 not taken.
114 if(!p_getc(&(temp_mapscr->sidewarpoverlayflags),f,true))
17036 return qe_invalid;
17037
1/2
✓ Branch 0 taken 114 times.
✗ Branch 1 not taken.
114 if(!p_getc(&(temp_mapscr->sidewarpindex),f,true))
17038 return qe_invalid;
17039 114 }
17040
2/2
✓ Branch 0 taken 4657 times.
✓ Branch 1 taken 289 times.
4946 if(scr_has_flags & SCRHAS_WARPRET)
17041 {
17042
2/2
✓ Branch 0 taken 1156 times.
✓ Branch 1 taken 289 times.
1445 for(int32_t i=0; i<4; i++)
17043 {
17044
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1156 times.
1156 if(!p_getc(&(temp_mapscr->warpreturnx[i]),f,true))
17045 return qe_invalid;
17046 1156 }
17047
2/2
✓ Branch 0 taken 1156 times.
✓ Branch 1 taken 289 times.
1445 for(int32_t i=0; i<4; i++)
17048 {
17049
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1156 times.
1156 if(!p_getc(&(temp_mapscr->warpreturny[i]),f,true))
17050 return qe_invalid;
17051 1156 }
17052
1/2
✓ Branch 0 taken 289 times.
✗ Branch 1 not taken.
289 if(!p_getc(&(temp_mapscr->warparrivalx),f,true))
17053 return qe_invalid;
17054
1/2
✓ Branch 0 taken 289 times.
✗ Branch 1 not taken.
289 if(!p_getc(&(temp_mapscr->warparrivaly),f,true))
17055 return qe_invalid;
17056 289 }
17057
2/2
✓ Branch 0 taken 759 times.
✓ Branch 1 taken 4187 times.
4946 if(scr_has_flags & SCRHAS_LAYERS)
17058 {
17059
2/2
✓ Branch 0 taken 4554 times.
✓ Branch 1 taken 759 times.
5313 for(int32_t k=0; k<6; k++)
17060 {
17061
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4554 times.
4554 if(!p_getc(&(temp_mapscr->layermap[k]),f,true))
17062 return qe_invalid;
17063 4554 }
17064
2/2
✓ Branch 0 taken 4554 times.
✓ Branch 1 taken 759 times.
5313 for(int32_t k=0; k<6; k++)
17065 {
17066
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4554 times.
4554 if(!p_getc(&(temp_mapscr->layerscreen[k]),f,true))
17067 return qe_invalid;
17068 4554 }
17069
2/2
✓ Branch 0 taken 4554 times.
✓ Branch 1 taken 759 times.
5313 for(int32_t k=0; k<6; k++)
17070 {
17071
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4554 times.
4554 if(!p_getc(&(temp_mapscr->layeropacity[k]),f,true))
17072 return qe_invalid;
17073 4554 }
17074
1/2
✓ Branch 0 taken 759 times.
✗ Branch 1 not taken.
759 if(!p_getc(&(temp_mapscr->hidelayers),f,true))
17075 return qe_invalid;
17076
1/2
✓ Branch 0 taken 759 times.
✗ Branch 1 not taken.
759 if(!p_getc(&(temp_mapscr->hidescriptlayers),f,true))
17077 return qe_invalid;
17078 759 }
17079 else
17080 {
17081
2/2
✓ Branch 0 taken 25122 times.
✓ Branch 1 taken 4187 times.
29309 for(int32_t k=0; k<6; k++)
17082 {
17083 25122 temp_mapscr->layeropacity[k] = 255;
17084 25122 }
17085 }
17086
1/2
✓ Branch 0 taken 4946 times.
✗ Branch 1 not taken.
4946 if(scr_has_flags & SCRHAS_MAZE)
17087 {
17088 for(int32_t k=0; k<4; k++)
17089 {
17090 if(!p_getc(&(temp_mapscr->path[k]),f,true))
17091 return qe_invalid;
17092 }
17093 if(!p_getc(&(temp_mapscr->exitdir),f,true))
17094 return qe_invalid;
17095 }
17096
2/2
✓ Branch 0 taken 4859 times.
✓ Branch 1 taken 87 times.
4946 if(scr_has_flags & SCRHAS_D_S_U)
17097 {
17098
1/2
✓ Branch 0 taken 87 times.
✗ Branch 1 not taken.
87 if(!p_igetw(&(temp_mapscr->door_combo_set),f,true))
17099 return qe_invalid;
17100
2/2
✓ Branch 0 taken 348 times.
✓ Branch 1 taken 87 times.
435 for(int32_t k=0; k<4; k++)
17101 {
17102
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 348 times.
348 if(!p_getc(&(temp_mapscr->door[k]),f,true))
17103 return qe_invalid;
17104 348 }
17105
17106
1/2
✓ Branch 0 taken 87 times.
✗ Branch 1 not taken.
87 if(!p_getc(&(temp_mapscr->stairx),f,true))
17107 return qe_invalid;
17108
17109
1/2
✓ Branch 0 taken 87 times.
✗ Branch 1 not taken.
87 if(!p_getc(&(temp_mapscr->stairy),f,true))
17110 return qe_invalid;
17111
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 87 times.
87 if(!p_igetw(&(temp_mapscr->undercombo),f,true))
17112 return qe_invalid;
17113
1/2
✓ Branch 0 taken 87 times.
✗ Branch 1 not taken.
87 if(!p_getc(&(temp_mapscr->undercset),f,true))
17114 return qe_invalid;
17115 87 }
17116
2/2
✓ Branch 0 taken 4597 times.
✓ Branch 1 taken 349 times.
4946 if(scr_has_flags & SCRHAS_FLAGS)
17117 {
17118
1/2
✓ Branch 0 taken 349 times.
✗ Branch 1 not taken.
349 if(!p_getc(&(temp_mapscr->flags),f,true))
17119 return qe_invalid;
17120
1/2
✓ Branch 0 taken 349 times.
✗ Branch 1 not taken.
349 if(!p_getc(&(temp_mapscr->flags2),f,true))
17121 return qe_invalid;
17122
1/2
✓ Branch 0 taken 349 times.
✗ Branch 1 not taken.
349 if(!p_getc(&(temp_mapscr->flags3),f,true))
17123 return qe_invalid;
17124
1/2
✓ Branch 0 taken 349 times.
✗ Branch 1 not taken.
349 if(!p_getc(&(temp_mapscr->flags4),f,true))
17125 return qe_invalid;
17126
1/2
✓ Branch 0 taken 349 times.
✗ Branch 1 not taken.
349 if(!p_getc(&(temp_mapscr->flags5),f,true))
17127 return qe_invalid;
17128
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 349 times.
349 if(!p_getc(&(temp_mapscr->flags6),f,true))
17129 return qe_invalid;
17130
1/2
✓ Branch 0 taken 349 times.
✗ Branch 1 not taken.
349 if(!p_getc(&(temp_mapscr->flags7),f,true))
17131 return qe_invalid;
17132
1/2
✓ Branch 0 taken 349 times.
✗ Branch 1 not taken.
349 if(!p_getc(&(temp_mapscr->flags8),f,true))
17133 return qe_invalid;
17134
1/2
✓ Branch 0 taken 349 times.
✗ Branch 1 not taken.
349 if(!p_getc(&(temp_mapscr->flags9),f,true))
17135 return qe_invalid;
17136
1/2
✓ Branch 0 taken 349 times.
✗ Branch 1 not taken.
349 if(!p_getc(&(temp_mapscr->flags10),f,true))
17137 return qe_invalid;
17138
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 349 times.
349 if(!p_getc(&(temp_mapscr->enemyflags),f,true))
17139 return qe_invalid;
17140 349 }
17141
2/2
✓ Branch 0 taken 4630 times.
✓ Branch 1 taken 316 times.
4946 if(scr_has_flags & SCRHAS_ENEMY)
17142 {
17143
2/2
✓ Branch 0 taken 3160 times.
✓ Branch 1 taken 316 times.
3476 for(int32_t k=0; k<10; k++)
17144 {
17145
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3160 times.
3160 if(!p_igetw(&(temp_mapscr->enemy[k]),f,true))
17146 return qe_invalid;
17147
1/2
✓ Branch 0 taken 3160 times.
✗ Branch 1 not taken.
3160 if (unsigned(temp_mapscr->enemy[k]) > MAXGUYS)
17148 temp_mapscr->enemy[k] = 0;
17149 3160 }
17150
1/2
✓ Branch 0 taken 316 times.
✗ Branch 1 not taken.
316 if(!p_getc(&(temp_mapscr->pattern),f,true))
17151 return qe_invalid;
17152 316 }
17153
2/2
✓ Branch 0 taken 4915 times.
✓ Branch 1 taken 31 times.
4946 if(scr_has_flags & SCRHAS_CARRY)
17154 {
17155
1/2
✓ Branch 0 taken 31 times.
✗ Branch 1 not taken.
31 if(!p_igetw(&(temp_mapscr->noreset),f,true))
17156 return qe_invalid;
17157
1/2
✓ Branch 0 taken 31 times.
✗ Branch 1 not taken.
31 if(!p_igetw(&(temp_mapscr->nocarry),f,true))
17158 return qe_invalid;
17159
1/2
✓ Branch 0 taken 31 times.
✗ Branch 1 not taken.
31 if(!p_getc(&(temp_mapscr->nextmap),f,true))
17160 return qe_invalid;
17161
1/2
✓ Branch 0 taken 31 times.
✗ Branch 1 not taken.
31 if(!p_getc(&(temp_mapscr->nextscr),f,true))
17162 return qe_invalid;
17163 31 }
17164
2/2
✓ Branch 0 taken 4922 times.
✓ Branch 1 taken 24 times.
4946 if(scr_has_flags & SCRHAS_SCRIPT)
17165 {
17166
1/2
✓ Branch 0 taken 24 times.
✗ Branch 1 not taken.
24 if(!p_igetw(&(temp_mapscr->script),f,true))
17167 return qe_invalid;
17168
1/2
✓ Branch 0 taken 24 times.
✗ Branch 1 not taken.
24 if(!p_getc(&(temp_mapscr->preloadscript),f,true))
17169 return qe_invalid;
17170
2/2
✓ Branch 0 taken 192 times.
✓ Branch 1 taken 24 times.
216 for ( int32_t q = 0; q < 8; q++ )
17171 {
17172
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 192 times.
192 if(!p_igetl(&(temp_mapscr->screeninitd[q]),f,true))
17173 return qe_invalid;
17174 192 }
17175 24 }
17176
1/2
✓ Branch 0 taken 4946 times.
✗ Branch 1 not taken.
4946 if(scr_has_flags & SCRHAS_UNUSED)
17177 {
17178 for ( int32_t q = 0; q < 10; q++ )
17179 {
17180 if(!p_igetl(&(temp_mapscr->npcstrings[q]),f,true))
17181 return qe_invalid;
17182 }
17183 for ( int32_t q = 0; q < 10; q++ )
17184 {
17185 if(!p_igetw(&(temp_mapscr->new_items[q]),f,true))
17186 return qe_invalid;
17187 }
17188 for ( int32_t q = 0; q < 10; q++ )
17189 {
17190 if(!p_igetw(&(temp_mapscr->new_item_x[q]),f,true))
17191 return qe_invalid;
17192 }
17193 for ( int32_t q = 0; q < 10; q++ )
17194 {
17195 if(!p_igetw(&(temp_mapscr->new_item_y[q]),f,true))
17196 return qe_invalid;
17197 }
17198 }
17199
2/2
✓ Branch 0 taken 4611 times.
✓ Branch 1 taken 335 times.
4946 if(scr_has_flags & SCRHAS_SECRETS)
17200 {
17201
2/2
✓ Branch 0 taken 42880 times.
✓ Branch 1 taken 335 times.
43215 for(int32_t k=0; k<128; k++)
17202 {
17203
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 42880 times.
42880 if(!p_igetw(&(temp_mapscr->secretcombo[k]),f,true))
17204 return qe_invalid;
17205 42880 }
17206
2/2
✓ Branch 0 taken 42880 times.
✓ Branch 1 taken 335 times.
43215 for(int32_t k=0; k<128; k++)
17207 {
17208
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 42880 times.
42880 if(!p_getc(&(temp_mapscr->secretcset[k]),f,true))
17209 return qe_invalid;
17210 42880 }
17211
2/2
✓ Branch 0 taken 42880 times.
✓ Branch 1 taken 335 times.
43215 for(int32_t k=0; k<128; k++)
17212 {
17213
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 42880 times.
42880 if(!p_getc(&(temp_mapscr->secretflag[k]),f,true))
17214 return qe_invalid;
17215 42880 }
17216 335 }
17217
2/2
✓ Branch 0 taken 2609 times.
✓ Branch 1 taken 2337 times.
4946 if(scr_has_flags & SCRHAS_COMBOFLAG)
17218 {
17219
2/2
✓ Branch 0 taken 411312 times.
✓ Branch 1 taken 2337 times.
413649 for(int32_t k=0; k<176; ++k)
17220 {
17221
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 411312 times.
411312 if(!p_igetw(&(temp_mapscr->data[k]),f,true))
17222 return qe_invalid;
17223 411312 }
17224
2/2
✓ Branch 0 taken 411312 times.
✓ Branch 1 taken 2337 times.
413649 for(int32_t k=0; k<176; ++k)
17225 {
17226
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 411312 times.
411312 if(!p_getc(&(temp_mapscr->sflag[k]),f,true))
17227 return qe_invalid;
17228 411312 }
17229
2/2
✓ Branch 0 taken 411312 times.
✓ Branch 1 taken 2337 times.
413649 for(int32_t k=0; k<176; ++k)
17230 {
17231
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 411312 times.
411312 if(!p_getc(&(temp_mapscr->cset[k]),f,true))
17232 return qe_invalid;
17233 411312 }
17234 2337 }
17235
1/2
✓ Branch 0 taken 4946 times.
✗ Branch 1 not taken.
4946 if(scr_has_flags & SCRHAS_MISC)
17236 {
17237
1/2
✓ Branch 0 taken 4946 times.
✗ Branch 1 not taken.
4946 if(!p_igetw(&(temp_mapscr->color),f,true))
17238 return qe_invalid;
17239
1/2
✓ Branch 0 taken 4946 times.
✗ Branch 1 not taken.
4946 if(!p_getc(&(temp_mapscr->csensitive),f,true))
17240 return qe_invalid;
17241
1/2
✓ Branch 0 taken 4946 times.
✗ Branch 1 not taken.
4946 if(!p_getc(&(temp_mapscr->oceansfx),f,true))
17242 return qe_invalid;
17243
1/2
✓ Branch 0 taken 4946 times.
✗ Branch 1 not taken.
4946 if(!p_getc(&(temp_mapscr->bosssfx),f,true))
17244 return qe_invalid;
17245
1/2
✓ Branch 0 taken 4946 times.
✗ Branch 1 not taken.
4946 if(!p_getc(&(temp_mapscr->secretsfx),f,true))
17246 return qe_invalid;
17247
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4946 times.
4946 if(!p_getc(&(temp_mapscr->holdupsfx),f,true))
17248 return qe_invalid;
17249
1/2
✓ Branch 0 taken 4946 times.
✗ Branch 1 not taken.
4946 if(!p_igetw(&(temp_mapscr->timedwarptics),f,true))
17250 return qe_invalid;
17251
1/2
✓ Branch 0 taken 4946 times.
✗ Branch 1 not taken.
4946 if(!p_igetw(&(temp_mapscr->screen_midi),f,true))
17252 return qe_invalid;
17253
1/2
✓ Branch 0 taken 4946 times.
✗ Branch 1 not taken.
4946 if(!p_getc(&(temp_mapscr->lens_layer),f,true))
17254 return qe_invalid;
17255 4946 }
17256 else
17257 {
17258 temp_mapscr->screen_midi = -1;
17259 temp_mapscr->csensitive = 1;
17260 }
17261 //FFC
17262 4946 bool old_ff = version < 25;
17263 4946 dword bits = 0;
17264 4946 word numffc = 32;
17265
2/2
✓ Branch 0 taken 66 times.
✓ Branch 1 taken 4880 times.
4946 if(old_ff)
17266 {
17267
1/2
✓ Branch 0 taken 66 times.
✗ Branch 1 not taken.
66 if(!p_igetl(&bits,f,true))
17268 return qe_invalid;
17269 66 }
17270 else
17271 {
17272
1/2
✓ Branch 0 taken 4880 times.
✗ Branch 1 not taken.
4880 if(!p_igetw(&numffc,f,true))
17273 return qe_invalid;
17274 }
17275 byte tempbyte;
17276 word tempw;
17277
4/6
✓ Branch 0 taken 17 times.
✓ Branch 1 taken 4929 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 17 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 17 times.
4946 static ffcdata nil_ffc;
17278 4946 temp_mapscr->ffcCountMarkDirty();
17279
2/2
✓ Branch 0 taken 4946 times.
✓ Branch 1 taken 7904 times.
12850 for(word m = 0; m < numffc; ++m)
17280 {
17281
1/2
✓ Branch 0 taken 7904 times.
✗ Branch 1 not taken.
7904 ffcdata& tempffc = (m < MAXFFCS)
17282 7904 ? temp_mapscr->ffcs[m]
17283 : nil_ffc; //sanity
17284 7904 tempffc.clear();
17285
3/4
✓ Branch 0 taken 2112 times.
✓ Branch 1 taken 5792 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2112 times.
7904 if(old_ff && !(bits & (1<<m))) continue;
17286
17287
1/2
✓ Branch 0 taken 5792 times.
✗ Branch 1 not taken.
5792 if(!p_igetw(&tempw,f,true))
17288 return qe_invalid;
17289
3/4
✓ Branch 0 taken 5792 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 948 times.
✓ Branch 3 taken 4844 times.
5792 if(!old_ff && !tempw) //empty ffc, nothing more to load
17290 4844 continue;
17291 948 tempffc.setData(tempw);
17292
17293
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 948 times.
948 if(!p_getc(&(tempffc.cset),f,true))
17294 return qe_invalid;
17295
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 948 times.
948 if(!p_igetw(&(tempffc.delay),f,true))
17296 return qe_invalid;
17297
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 948 times.
948 if(!p_igetzf(&(tempffc.x),f,true))
17298 return qe_invalid;
17299
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 948 times.
948 if(!p_igetzf(&(tempffc.y),f,true))
17300 return qe_invalid;
17301
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 948 times.
948 if(!p_igetzf(&(tempffc.vx),f,true))
17302 return qe_invalid;
17303
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 948 times.
948 if(!p_igetzf(&(tempffc.vy),f,true))
17304 return qe_invalid;
17305
1/2
✓ Branch 0 taken 948 times.
✗ Branch 1 not taken.
948 if(!p_igetzf(&(tempffc.ax),f,true))
17306 return qe_invalid;
17307
1/2
✓ Branch 0 taken 948 times.
✗ Branch 1 not taken.
948 if(!p_igetzf(&(tempffc.ay),f,true))
17308 return qe_invalid;
17309
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 948 times.
948 if(!p_getc(&(tempffc.link),f,true))
17310 return qe_invalid;
17311
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 948 times.
948 if(version < 24)
17312 {
17313 if(!p_getc(&tempbyte,f,true))
17314 return qe_invalid;
17315 tempffc.hxsz = (tempbyte&0x3F)+1;
17316 tempffc.txsz = (tempbyte>>6)+1;
17317 if(!p_getc(&tempbyte,f,true))
17318 return qe_invalid;
17319 tempffc.hysz = (tempbyte&0x3F)+1;
17320 tempffc.tysz = (tempbyte>>6)+1;
17321 }
17322 else
17323 {
17324
1/2
✓ Branch 0 taken 948 times.
✗ Branch 1 not taken.
948 if(!p_igetl(&(tempffc.hxsz),f,true))
17325 return qe_invalid;
17326
1/2
✓ Branch 0 taken 948 times.
✗ Branch 1 not taken.
948 if(!p_igetl(&(tempffc.hysz),f,true))
17327 return qe_invalid;
17328
1/2
✓ Branch 0 taken 948 times.
✗ Branch 1 not taken.
948 if(!p_getc(&(tempffc.txsz),f,true))
17329 return qe_invalid;
17330
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 948 times.
948 if(!p_getc(&(tempffc.tysz),f,true))
17331 return qe_invalid;
17332 }
17333
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 948 times.
948 if(!p_igetl(&(tempffc.flags),f,true))
17334 return qe_invalid;
17335 948 tempffc.updateSolid();
17336
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 948 times.
948 if(!p_igetw(&(tempffc.script),f,true))
17337 return qe_invalid;
17338
2/2
✓ Branch 0 taken 7584 times.
✓ Branch 1 taken 948 times.
8532 for(auto q = 0; q < 8; ++q)
17339 {
17340
1/2
✓ Branch 0 taken 7584 times.
✗ Branch 1 not taken.
7584 if(!p_igetl(&(tempffc.initd[q]),f,true))
17341 return qe_invalid;
17342 7584 }
17343
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 948 times.
948 if(!p_getc(&(tempbyte),f,true))
17344 return qe_invalid;
17345 948 tempffc.inita[0]=tempbyte*10000;
17346
17347
1/2
✓ Branch 0 taken 948 times.
✗ Branch 1 not taken.
948 if(!p_getc(&(tempbyte),f,true))
17348 return qe_invalid;
17349 948 tempffc.inita[1]=tempbyte*10000;
17350
17351 948 tempffc.initialized = false;
17352 948 }
17353
2/2
✓ Branch 0 taken 625184 times.
✓ Branch 1 taken 4946 times.
630130 for(word m = numffc; m < MAXFFCS; ++m)
17354 {
17355 625184 temp_mapscr->ffcs[m].clear();
17356 625184 }
17357 //END FFC
17358 }
17359 133466 return 0;
17360 140080 }
17361
17362
17363 93 int32_t readmaps(PACKFILE *f, zquestheader *Header, bool keepdata)
17364 {
17365 93 int32_t scr=0;
17366
17367 93 word version=0;
17368 dword dummy;
17369 int32_t screens_to_read;
17370
17371 93 mapscr temp_mapscr;
17372 zcmap temp_map;
17373 word temp_map_count;
17374 dword section_size;
17375
17376
2/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<137)))
17377 {
17378 screens_to_read=MAPSCRS192b136;
17379 }
17380 else
17381 {
17382 93 screens_to_read=MAPSCRS;
17383 }
17384
17385
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(Header->zelda_version > 0x192)
17386 {
17387 //section version info
17388
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&version,f,true))
17389 {
17390 return qe_invalid;
17391 }
17392
17393 93 FFCore.quest_format[vMaps] = version;
17394
17395 //al_trace("Maps version %d\n", version);
17396
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&dummy,f,true))
17397 {
17398 return qe_invalid;
17399 }
17400
17401 //section size
17402
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&section_size,f,true))
17403 {
17404 return qe_invalid;
17405 }
17406
17407 //finally... section data
17408
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(!p_igetw(&temp_map_count,f,true))
17409 {
17410 return 5;
17411 }
17412 93 }
17413 else
17414 {
17415 temp_map_count=map_count;
17416 }
17417
17418
17419
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata)
17420 {
17421 93 const int32_t _mapsSize = MAPSCRS*temp_map_count;
17422 93 TheMaps.resize(_mapsSize);
17423
17424
2/2
✓ Branch 0 taken 140352 times.
✓ Branch 1 taken 93 times.
140445 for(int32_t i(0); i<_mapsSize; i++)
17425 140352 TheMaps[i].zero_memory();
17426
17427 // Used to be done for each screen
17428
2/2
✓ Branch 0 taken 11904 times.
✓ Branch 1 taken 93 times.
11997 for(int32_t i=0; i<MAXFFCS; i++)
17429 {
17430 11904 ffcScriptData[i].a[0] = 10000;
17431 11904 ffcScriptData[i].a[1] = 10000;
17432 11904 }
17433
17434 93 memset(ZCMaps, 0, sizeof(zcmap)*MAXMAPS2);
17435 93 }
17436
17437 93 temp_mapscr.zero_memory();
17438
17439 93 memset(&temp_map, 0, sizeof(zcmap));
17440 93 temp_map.scrResWidth = 256;
17441 93 temp_map.scrResHeight = 224;
17442 93 temp_map.tileWidth = 16;
17443 93 temp_map.tileHeight = 11;
17444 93 temp_map.viewWidth = 256;
17445 93 temp_map.viewHeight = 176;
17446 93 temp_map.viewX = 0;
17447 93 temp_map.viewY = 64;
17448 93 temp_map.subaWidth = 256;
17449 93 temp_map.subaHeight = 168;
17450 93 temp_map.subaTrans = false;
17451 93 temp_map.subpWidth = 256;
17452 93 temp_map.subpHeight = 56;
17453 93 temp_map.subpTrans = false;
17454
4/4
✓ Branch 0 taken 93 times.
✓ Branch 1 taken 1032 times.
✓ Branch 2 taken 1032 times.
✓ Branch 3 taken 93 times.
1125 for(int32_t i=0; i<temp_map_count && i<MAXMAPS2; i++)
17455 {
17456
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1032 times.
1032 if(keepdata==true) //!TODO Trim fully
17457 {
17458 1032 memcpy(&ZCMaps[i], &temp_map, sizeof(zcmap));
17459 1032 }
17460 1032 byte valid=1;
17461
2/2
✓ Branch 0 taken 945 times.
✓ Branch 1 taken 87 times.
1032 if(version > 22)
17462 {
17463
1/2
✓ Branch 0 taken 87 times.
✗ Branch 1 not taken.
87 if(!p_getc(&valid,f,true))
17464 return qe_invalid;
17465 87 }
17466
2/2
✓ Branch 0 taken 140352 times.
✓ Branch 1 taken 1032 times.
141384 for(int32_t j=0; j<screens_to_read; j++)
17467 {
17468 140352 scr=i*MAPSCRS+j;
17469 140352 clear_screen(&temp_mapscr);
17470
2/2
✓ Branch 0 taken 272 times.
✓ Branch 1 taken 140080 times.
140352 if(valid)
17471 140080 readmapscreen(f, Header, &temp_mapscr, &temp_map, version);
17472
17473
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 140352 times.
140352 if(keepdata==true)
17474 {
17475 140352 TheMaps[scr] = temp_mapscr;
17476 140352 }
17477 140352 }
17478
17479
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1032 times.
1032 if(keepdata==true)
17480 {
17481
2/6
✓ Branch 0 taken 1032 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1032 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
1032 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<137)))
17482 {
17483 int32_t index = (i*MAPSCRS+132);
17484
17485 TheMaps[index]=TheMaps[index-1];
17486
17487 MEMCPY_ARR(TheMaps[i*MAPSCRS+132].data, TheMaps[i*MAPSCRS+131].data);
17488 MEMCPY_ARR(TheMaps[i*MAPSCRS+132].sflag, TheMaps[i*MAPSCRS+131].sflag);
17489 MEMCPY_ARR(TheMaps[i*MAPSCRS+132].cset, TheMaps[i*MAPSCRS+131].cset);
17490
17491 for(int32_t j=133; j<MAPSCRS; j++)
17492 {
17493 scr=i*MAPSCRS+j;
17494
17495 TheMaps[scr].zero_memory();
17496 TheMaps[scr].valid = mVERSION;
17497 TheMaps[scr].screen_midi = -1;
17498 TheMaps[scr].csensitive = 1;
17499 }
17500 }
17501
17502
2/6
✓ Branch 0 taken 1032 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1032 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
1032 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<154)))
17503 {
17504 for(int32_t j=0; j<MAPSCRS; j++)
17505 {
17506 scr=i*MAPSCRS+j;
17507 TheMaps[scr].door_combo_set=MakeDoors(i, j);
17508
17509 for(int32_t k=0; k<128; k++)
17510 {
17511 TheMaps[scr].secretcset[k]=tcmbcset2(i, TheMaps[scr].secretcombo[k]);
17512 TheMaps[scr].secretflag[k]=tcmbflag2(i, TheMaps[scr].secretcombo[k]);
17513 TheMaps[scr].secretcombo[k]=tcmbdat2(i, j, TheMaps[scr].secretcombo[k]);
17514 }
17515 }
17516 }
17517 1032 }
17518 1032 }
17519
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata)
17520 {
17521 93 map_count = temp_map_count;
17522 93 }
17523 93 clear_screen(&temp_mapscr);
17524 93 return 0;
17525 93 }
17526
17527
17528 75 int32_t readcombos_old(word section_version, PACKFILE *f, zquestheader *, word version, word build, word start_combo, word max_combos, bool keepdata)
17529 {
17530 75 reset_combo_animations();
17531 75 reset_combo_animations2();
17532
17533 75 init_combo_classes();
17534
17535 // combos
17536 75 word combos_used=0;
17537 int32_t dummy;
17538 byte padding;
17539 75 newcombo temp_combo;
17540 //word section_cversion=0;
17541
17542
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 if(keepdata==true)
17543 {
17544
2/2
✓ Branch 0 taken 4896000 times.
✓ Branch 1 taken 75 times.
4896075 for(int32_t q = start_combo; q < start_combo+max_combos; ++q)
17545 4896000 combobuf[q].clear();
17546 75 }
17547
17548 // if(version > 0x192)
17549 // {
17550 // //section version info
17551 // if(!p_igetw(&section_version,f,true))
17552 // {
17553 // return qe_invalid;
17554 // }
17555
17556 // FFCore.quest_format[vCombos] = section_version;
17557
17558 // //al_trace("Combos version %d\n", section_version);
17559 // if(!p_igetw(&section_cversion,f,true))
17560 // {
17561 // return qe_invalid;
17562 // }
17563
17564 // //section size
17565 // if(!p_igetl(&dummy,f,true))
17566 // {
17567 // return qe_invalid;
17568 // }
17569 // }
17570
17571
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 if(version < 0x174)
17572 {
17573 combos_used=1024;
17574 }
17575
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 else if(version < 0x191)
17576 {
17577 combos_used=2048;
17578 }
17579 else
17580 {
17581
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!p_igetw(&combos_used,f,true))
17582 {
17583 return qe_invalid;
17584 }
17585 }
17586
17587 //finally... section data
17588
2/2
✓ Branch 0 taken 333738 times.
✓ Branch 1 taken 75 times.
333813 for(int32_t i=0; i<combos_used; i++)
17589 {
17590 333738 temp_combo.clear();
17591
17592
2/2
✓ Branch 0 taken 68884 times.
✓ Branch 1 taken 264854 times.
333738 if ( section_version >= 11 )
17593 {
17594
1/2
✓ Branch 0 taken 68884 times.
✗ Branch 1 not taken.
68884 if(!p_igetl(&temp_combo.tile,f,true))
17595 {
17596 return qe_invalid;
17597 }
17598 68884 }
17599 else
17600 {
17601
1/2
✓ Branch 0 taken 264854 times.
✗ Branch 1 not taken.
264854 if(!p_igetw(&temp_combo.tile,f,true))
17602 {
17603 return qe_invalid;
17604 }
17605 }
17606 333738 temp_combo.o_tile = temp_combo.tile;
17607
1/2
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
333738 if(!p_getc(&temp_combo.flip,f,true))
17608 {
17609 return qe_invalid;
17610 }
17611
17612
1/2
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
333738 if(!p_getc(&temp_combo.walk,f,true))
17613 {
17614 return qe_invalid;
17615 }
17616
17617
1/2
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
333738 if(!p_getc(&temp_combo.type,f,true))
17618 {
17619 return qe_invalid;
17620 }
17621
17622
1/2
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
333738 if(!p_getc(&temp_combo.csets,f,true))
17623 {
17624 return qe_invalid;
17625 }
17626
17627
1/2
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
333738 if(version < 0x193)
17628 {
17629 if(!p_getc(&padding,f,true))
17630 {
17631 return qe_invalid;
17632 }
17633
17634 if(!p_getc(&padding,f,true))
17635 {
17636 return qe_invalid;
17637 }
17638
17639 if(version < 0x192)
17640 {
17641 if(version == 0x191)
17642 {
17643 for(int32_t tmpcounter=0; tmpcounter<16; tmpcounter++)
17644 {
17645 if(!p_getc(&padding,f,true))
17646 {
17647 return qe_invalid;
17648 }
17649 }
17650 }
17651
17652 if(keepdata==true)
17653 {
17654 memcpy(&combobuf[i], &temp_combo, sizeof(temp_combo));
17655 }
17656
17657 continue;
17658 }
17659 }
17660
17661
1/2
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
333738 if(!p_getc(&temp_combo.frames,f,true))
17662 {
17663 return qe_invalid;
17664 }
17665
17666
1/2
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
333738 if(!p_getc(&temp_combo.speed,f,true))
17667 {
17668 return qe_invalid;
17669 }
17670
17671
1/2
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
333738 if(!p_igetw(&temp_combo.nextcombo,f,true))
17672 {
17673 return qe_invalid;
17674 }
17675
17676
1/2
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
333738 if(!p_getc(&temp_combo.nextcset,f,true))
17677 {
17678 return qe_invalid;
17679 }
17680
17681 //Base flag
17682
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 333738 times.
333738 if(section_version>=3)
17683 {
17684
1/2
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
333738 if(!p_getc(&temp_combo.flag,f,true))
17685 {
17686 return qe_invalid;
17687 }
17688 333738 }
17689
17690
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 333738 times.
333738 if(section_version>=4)
17691 {
17692
1/2
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
333738 if(!p_getc(&temp_combo.skipanim,f,true))
17693 {
17694 return qe_invalid;
17695 }
17696
17697
1/2
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
333738 if(!p_igetw(&temp_combo.nexttimer,f,true))
17698 {
17699 return qe_invalid;
17700 }
17701 333738 }
17702
17703
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 333738 times.
333738 if(section_version>=5)
17704 {
17705
1/2
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
333738 if(!p_getc(&temp_combo.skipanimy,f,true))
17706 {
17707 return qe_invalid;
17708 }
17709 333738 }
17710
17711
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 333738 times.
333738 if(section_version>=6)
17712 {
17713
1/2
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
333738 if(!p_getc(&temp_combo.animflags,f,true))
17714 {
17715 return qe_invalid;
17716 }
17717
17718
1/2
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
333738 if(section_version == 6)
17719 temp_combo.animflags = temp_combo.animflags ? AF_FRESH : 0;
17720 333738 }
17721
17722
2/2
✓ Branch 0 taken 264854 times.
✓ Branch 1 taken 68884 times.
333738 if(section_version>=8) //combo Attributes[4] and userflags.
17723 {
17724
2/2
✓ Branch 0 taken 275536 times.
✓ Branch 1 taken 68884 times.
344420 for ( int32_t q = 0; q < NUM_COMBO_ATTRIBUTES; q++ )
17725 {
17726
1/2
✓ Branch 0 taken 275536 times.
✗ Branch 1 not taken.
275536 if(!p_igetl(&temp_combo.attributes[q],f,true))
17727 {
17728 return qe_invalid;
17729 }
17730 275536 }
17731
1/2
✓ Branch 0 taken 68884 times.
✗ Branch 1 not taken.
68884 if(!p_igetl(&temp_combo.usrflags,f,true))
17732 {
17733 return qe_invalid;
17734 }
17735
1/2
✓ Branch 0 taken 68884 times.
✗ Branch 1 not taken.
68884 if(section_version >= 20)
17736 {
17737
1/2
✓ Branch 0 taken 68884 times.
✗ Branch 1 not taken.
68884 if(!p_igetw(&temp_combo.genflags,f,true))
17738 {
17739 return qe_invalid;
17740 }
17741 68884 }
17742 else
17743 {
17744 temp_combo.genflags = 0;
17745 switch(temp_combo.type)
17746 {
17747 case cPUSH_WAIT: case cPUSH_HEAVY:
17748 case cPUSH_HW: case cL_STATUE:
17749 case cR_STATUE: case cPUSH_HEAVY2:
17750 case cPUSH_HW2: case cPOUND:
17751 case cC_STATUE: case cMIRROR:
17752 case cMIRRORSLASH: case cMIRRORBACKSLASH:
17753 case cMAGICPRISM: case cMAGICPRISM4:
17754 case cMAGICSPONGE: case cEYEBALL_A:
17755 case cEYEBALL_B: case cEYEBALL_4:
17756 case cBUSH: case cFLOWERS:
17757 case cLOCKBLOCK: case cLOCKBLOCK2:
17758 case cBOSSLOCKBLOCK: case cBOSSLOCKBLOCK2:
17759 case cCHEST: case cCHEST2:
17760 case cLOCKEDCHEST: case cLOCKEDCHEST2:
17761 case cBOSSCHEST: case cBOSSCHEST2:
17762 case cBUSHNEXT: case cBUSHTOUCHY:
17763 case cFLOWERSTOUCHY: case cBUSHNEXTTOUCHY:
17764 case cSIGNPOST: case cCSWITCHBLOCK:
17765 case cTORCH: case cTRIGGERGENERIC:
17766 if(temp_combo.usrflags & cflag16)
17767 {
17768 temp_combo.genflags |= cflag1;
17769 temp_combo.usrflags &= ~cflag16;
17770 }
17771 break; }
17772 }
17773 68884 }
17774
2/2
✓ Branch 0 taken 68884 times.
✓ Branch 1 taken 264854 times.
333738 if(section_version>=10) //combo trigger flags
17775 {
17776
2/2
✓ Branch 0 taken 206652 times.
✓ Branch 1 taken 68884 times.
275536 for ( int32_t q = 0; q < 3; q++ )
17777 {
17778
1/2
✓ Branch 0 taken 206652 times.
✗ Branch 1 not taken.
206652 if(!p_igetl(&temp_combo.triggerflags[q],f,true))
17779 {
17780 return qe_invalid;
17781 }
17782 206652 }
17783 68884 }
17784
1/2
✓ Branch 0 taken 264854 times.
✗ Branch 1 not taken.
264854 else if(section_version==9) //combo trigger flags, V9 only had two indices of triggerflags[]
17785 {
17786 for ( int32_t q = 0; q < 2; q++ )
17787 {
17788 if(!p_igetl(&temp_combo.triggerflags[q],f,true))
17789 {
17790 return qe_invalid;
17791 }
17792 }
17793 }
17794
2/2
✓ Branch 0 taken 264854 times.
✓ Branch 1 taken 68884 times.
333738 if(section_version >= 9)
17795 {
17796
1/2
✓ Branch 0 taken 68884 times.
✗ Branch 1 not taken.
68884 if(!p_igetl(&temp_combo.triggerlevel,f,true))
17797 {
17798 return qe_invalid;
17799 }
17800 68884 }
17801
2/2
✓ Branch 0 taken 264854 times.
✓ Branch 1 taken 68884 times.
333738 if(section_version >= 22)
17802 {
17803
1/2
✓ Branch 0 taken 68884 times.
✗ Branch 1 not taken.
68884 if(!p_getc(&temp_combo.triggerbtn,f,true))
17804 {
17805 return qe_invalid;
17806 }
17807 68884 }
17808
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 333738 times.
333738 if(section_version < 23)
17809 {
17810
2/2
✓ Branch 0 taken 144 times.
✓ Branch 1 taken 333594 times.
333738 switch(temp_combo.type) //combotriggerCMBTYPEFX now required for combotype-specific effects
17811 {
17812 case cSCRIPT1: case cSCRIPT2: case cSCRIPT3: case cSCRIPT4: case cSCRIPT5:
17813 case cSCRIPT6: case cSCRIPT7: case cSCRIPT8: case cSCRIPT9: case cSCRIPT10:
17814 case cTRIGGERGENERIC: case cCSWITCH:
17815 144 temp_combo.triggerflags[0] |= combotriggerCMBTYPEFX;
17816 144 }
17817 333738 }
17818
1/2
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
333738 if(section_version >= 24)
17819 {
17820 if(!p_getc(&temp_combo.triggeritem,f,true))
17821 {
17822 return qe_invalid;
17823 }
17824 if(!p_getc(&temp_combo.trigtimer,f,true))
17825 {
17826 return qe_invalid;
17827 }
17828 }
17829
1/2
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
333738 if(section_version >= 25)
17830 {
17831 if(!p_getc(&temp_combo.trigsfx,f,true))
17832 {
17833 return qe_invalid;
17834 }
17835 }
17836
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 333738 times.
333738 if(section_version >= 27)
17837 {
17838 if(!p_igetl(&temp_combo.trigchange,f,true))
17839 {
17840 return qe_invalid;
17841 }
17842 }
17843 else
17844 {
17845
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 333738 times.
333738 if(temp_combo.triggerflags[0] & 0x00040000) //'next'
17846 temp_combo.trigchange = 1;
17847
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 333738 times.
333738 else if(temp_combo.triggerflags[0] & 0x00080000) //'prev'
17848 temp_combo.trigchange = -1;
17849 333738 else temp_combo.trigchange = 0;
17850 333738 temp_combo.triggerflags[0] &= ~(0x00040000|0x00080000);
17851 }
17852
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 333738 times.
333738 if(section_version >= 29)
17853 {
17854 if(!p_igetw(&temp_combo.trigprox,f,true))
17855 {
17856 return qe_invalid;
17857 }
17858 if(!p_getc(&temp_combo.trigctr,f,true))
17859 {
17860 return qe_invalid;
17861 }
17862 if(!p_igetl(&temp_combo.trigctramnt,f,true))
17863 {
17864 return qe_invalid;
17865 }
17866 }
17867 else
17868 {
17869 333738 temp_combo.trigprox = 0;
17870 333738 temp_combo.trigctr = 0;
17871 333738 temp_combo.trigctramnt = 0;
17872 }
17873
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 333738 times.
333738 if(section_version >= 30)
17874 {
17875 if(!p_getc(&temp_combo.triglbeam,f,true))
17876 {
17877 return qe_invalid;
17878 }
17879 }
17880 333738 else temp_combo.triglbeam = 0;
17881
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 333738 times.
333738 if(section_version >= 31)
17882 {
17883 if(!p_getc(&temp_combo.trigcschange,f,true))
17884 {
17885 return qe_invalid;
17886 }
17887 if(!p_igetw(&temp_combo.spawnitem,f,true))
17888 {
17889 return qe_invalid;
17890 }
17891 if(!p_igetw(&temp_combo.spawnenemy,f,true))
17892 {
17893 return qe_invalid;
17894 }
17895 if(!p_getc(&temp_combo.exstate,f,true))
17896 {
17897 return qe_invalid;
17898 }
17899 if(!p_igetl(&temp_combo.spawnip,f,true))
17900 {
17901 return qe_invalid;
17902 }
17903 if(!p_getc(&temp_combo.trigcopycat,f,true))
17904 {
17905 return qe_invalid;
17906 }
17907 }
17908 else
17909 {
17910 333738 temp_combo.trigcschange = 0;
17911 333738 temp_combo.spawnitem = 0;
17912 333738 temp_combo.spawnenemy = 0;
17913 333738 temp_combo.exstate = -1;
17914 333738 temp_combo.spawnip = 0;
17915 333738 temp_combo.trigcopycat = 0;
17916 }
17917
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 333738 times.
333738 if(section_version >= 32)
17918 {
17919 if(!p_getc(&temp_combo.trigcooldown,f,true))
17920 {
17921 return qe_invalid;
17922 }
17923 }
17924 else
17925 {
17926 333738 temp_combo.trigcooldown = 0;
17927 }
17928
17929
2/2
✓ Branch 0 taken 264854 times.
✓ Branch 1 taken 68884 times.
333738 if(section_version>=12) //combo label
17930 {
17931
2/2
✓ Branch 0 taken 757724 times.
✓ Branch 1 taken 68884 times.
826608 for ( int32_t q = 0; q < 11; q++ )
17932 {
17933
1/2
✓ Branch 0 taken 757724 times.
✗ Branch 1 not taken.
757724 if(!p_getc(&temp_combo.label[q],f,true))
17934 {
17935 return qe_invalid;
17936 }
17937 757724 }
17938 68884 }
17939
2/2
✓ Branch 0 taken 68884 times.
✓ Branch 1 taken 264854 times.
333738 if(section_version<12) //combo label
17940 {
17941
2/2
✓ Branch 0 taken 2913394 times.
✓ Branch 1 taken 264854 times.
3178248 for ( int32_t q = 0; q < 11; q++ )
17942 {
17943 2913394 temp_combo.label[q] = 0;
17944 2913394 }
17945 264854 }
17946 //al_trace("Read combo label\n");
17947
2/2
✓ Branch 0 taken 264854 times.
✓ Branch 1 taken 68884 times.
333738 if(section_version>=13) //attribytes[4]
17948 {
17949
2/2
✓ Branch 0 taken 275536 times.
✓ Branch 1 taken 68884 times.
344420 for ( int32_t q = 0; q < 4; q++ ) //Bad Zoria, don't mix constants with hardcodes
17950 {
17951
1/2
✓ Branch 0 taken 275536 times.
✗ Branch 1 not taken.
275536 if(!p_getc(&temp_combo.attribytes[q],f,true))
17952 {
17953 return qe_invalid;
17954 }
17955 275536 }
17956
17957 68884 }
17958 //al_trace("Read combo attribytes\n");
17959
2/2
✓ Branch 0 taken 68884 times.
✓ Branch 1 taken 264854 times.
333738 if( section_version < 13 )
17960 {
17961
2/2
✓ Branch 0 taken 1059416 times.
✓ Branch 1 taken 264854 times.
1324270 for ( int32_t q = 0; q < NUM_COMBO_ATTRIBUTES; q++ )
17962 {
17963 1059416 temp_combo.attribytes[q] = 0;
17964 1059416 }
17965
17966 264854 }
17967 /* HIGHLY UNORTHODOX UPDATING THING, by Deedee
17968 * This fixes a poor implementation of a ->next flag bug thing.
17969 * Zoria didn't bump up the versions as liberally as he should have, but thankfully
17970 * there was a version bump a few weeks before a change that broke stuff.
17971 */
17972
3/4
✓ Branch 0 taken 68884 times.
✓ Branch 1 taken 264854 times.
✓ Branch 2 taken 68884 times.
✗ Branch 3 not taken.
333738 if (section_version >= 13 && section_version < 21)
17973 {
17974 set_bit(quest_rules,qr_BUGGY_BUGGY_SLASH_TRIGGERS,1);
17975 }
17976 //combo scripts
17977
2/2
✓ Branch 0 taken 264854 times.
✓ Branch 1 taken 68884 times.
333738 if(section_version>=14)
17978 {
17979
1/2
✓ Branch 0 taken 68884 times.
✗ Branch 1 not taken.
68884 if(!p_igetw(&temp_combo.script,f,true)) return qe_invalid;
17980
2/2
✓ Branch 0 taken 137768 times.
✓ Branch 1 taken 68884 times.
206652 for ( int32_t q = 0; q < 2; q++ )
17981 {
17982
1/2
✓ Branch 0 taken 137768 times.
✗ Branch 1 not taken.
137768 if(!p_igetl(&temp_combo.initd[q],f,true))
17983 {
17984 return qe_invalid;
17985 }
17986 137768 }
17987
17988 68884 }
17989
2/2
✓ Branch 0 taken 68884 times.
✓ Branch 1 taken 264854 times.
333738 if(section_version<14)
17990 {
17991 264854 temp_combo.script = 0;
17992
2/2
✓ Branch 0 taken 529708 times.
✓ Branch 1 taken 264854 times.
794562 for ( int32_t q = 0; q < 2; q++ )
17993 {
17994 529708 temp_combo.initd[q] = 0;
17995 529708 }
17996 264854 }
17997 //al_trace("Read combo script data\n");
17998
2/2
✓ Branch 0 taken 68884 times.
✓ Branch 1 taken 264854 times.
333738 if(section_version>=15)
17999 {
18000
1/2
✓ Branch 0 taken 68884 times.
✗ Branch 1 not taken.
68884 if(!p_igetl(&temp_combo.o_tile,f,true)) return qe_invalid;
18001
2/2
✓ Branch 0 taken 37028 times.
✓ Branch 1 taken 31856 times.
68884 if(!temp_combo.o_tile) temp_combo.o_tile = temp_combo.tile;
18002
1/2
✓ Branch 0 taken 68884 times.
✗ Branch 1 not taken.
68884 if(!p_getc(&temp_combo.cur_frame,f,true)) return qe_invalid;
18003
1/2
✓ Branch 0 taken 68884 times.
✗ Branch 1 not taken.
68884 if(!p_getc(&temp_combo.aclk,f,true)) return qe_invalid;
18004 68884 }
18005 else
18006 {
18007 264854 temp_combo.o_tile = temp_combo.tile;
18008 264854 temp_combo.cur_frame = 0;
18009 264854 temp_combo.aclk = 0;
18010 }
18011
2/2
✓ Branch 0 taken 68884 times.
✓ Branch 1 taken 264854 times.
333738 if(section_version>=17) //attribytes[4]
18012 {
18013
2/2
✓ Branch 0 taken 275536 times.
✓ Branch 1 taken 68884 times.
344420 for ( int32_t q = 4; q < 8; q++ ) //bump up attribytes...
18014 {
18015
1/2
✓ Branch 0 taken 275536 times.
✗ Branch 1 not taken.
275536 if(!p_getc(&temp_combo.attribytes[q],f,true))
18016 {
18017 return qe_invalid;
18018 }
18019 275536 }
18020
2/2
✓ Branch 0 taken 551072 times.
✓ Branch 1 taken 68884 times.
619956 for ( int32_t q = 0; q < 8; q++ ) //...and add attrishorts
18021 {
18022
1/2
✓ Branch 0 taken 551072 times.
✗ Branch 1 not taken.
551072 if(!p_igetw(&temp_combo.attrishorts[q],f,true))
18023 {
18024 return qe_invalid;
18025 }
18026 551072 }
18027
18028 68884 }
18029 else
18030 {
18031
2/2
✓ Branch 0 taken 1059416 times.
✓ Branch 1 taken 264854 times.
1324270 for ( int32_t q = 4; q < 8; q++ ) //bump up attribytes...
18032 {
18033 1059416 temp_combo.attribytes[q] = 0;
18034 1059416 }
18035
2/2
✓ Branch 0 taken 2118832 times.
✓ Branch 1 taken 264854 times.
2383686 for ( int32_t q = 0; q < 8; q++ ) //...and add attrishorts
18036 {
18037 2118832 temp_combo.attrishorts[q] = 0;
18038 2118832 }
18039 }
18040
2/2
✓ Branch 0 taken 68884 times.
✓ Branch 1 taken 264854 times.
333738 if(section_version<18) //upper bits for .walk
18041 {
18042 264854 temp_combo.walk |= 0xF0; //All on by default for old quests -E
18043 264854 }
18044
2/2
✓ Branch 0 taken 68884 times.
✓ Branch 1 taken 264854 times.
333738 if(section_version < 19)
18045 {
18046
2/2
✓ Branch 0 taken 1059416 times.
✓ Branch 1 taken 264854 times.
1324270 for(int32_t q = 0; q < 4; ++q)
18047 {
18048 1059416 temp_combo.attributes[q] *= 10000L;
18049 1059416 }
18050 264854 }
18051
18052
1/2
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
333738 if(version < 0x193)
18053 {
18054 for(int32_t q=0; q<11; q++)
18055 {
18056 if(!p_getc(&dummy,f,true))
18057 {
18058 return qe_invalid;
18059 }
18060 }
18061 }
18062
18063 //Goriya tiles were flipped around in 2.11 build 7. Compensate for the flip here. -DD
18064
2/6
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 333738 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
333738 if((version < 0x211)||((version == 0x211)&&(build<7)))
18065 {
18066 if(!get_bit(quest_rules,qr_NEWENEMYTILES))
18067 {
18068 switch(temp_combo.tile)
18069 {
18070 case 130:
18071 temp_combo.tile = 132;
18072 break;
18073
18074 case 131:
18075 temp_combo.tile = 133;
18076 break;
18077
18078 case 132:
18079 temp_combo.tile = 130;
18080 break;
18081
18082 case 133:
18083 temp_combo.tile = 131;
18084 break;
18085 }
18086 }
18087 }
18088
18089
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 333738 times.
333738 if(section_version < 25)
18090 {
18091
2/2
✓ Branch 0 taken 2509 times.
✓ Branch 1 taken 331229 times.
333738 switch(temp_combo.type)
18092 {
18093 case cLOCKBLOCK: case cBOSSLOCKBLOCK:
18094
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2509 times.
2509 if(!(temp_combo.usrflags & cflag3))
18095 2509 temp_combo.attribytes[3] = WAV_DOOR;
18096 2509 temp_combo.usrflags &= ~cflag3;
18097 2509 break;
18098 }
18099 333738 }
18100
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 333738 times.
333738 if(section_version < 26)
18101 {
18102
2/2
✓ Branch 0 taken 333247 times.
✓ Branch 1 taken 491 times.
333738 if(temp_combo.type == cARMOS)
18103 {
18104
1/2
✓ Branch 0 taken 491 times.
✗ Branch 1 not taken.
491 if(temp_combo.usrflags & cflag1)
18105 temp_combo.usrflags |= cflag3;
18106 491 }
18107 333738 }
18108
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 333738 times.
333738 if(section_version < 28)
18109 {
18110
2/2
✓ Branch 0 taken 1312 times.
✓ Branch 1 taken 332426 times.
333738 switch(temp_combo.type)
18111 {
18112 case cLOCKBLOCK: case cLOCKEDCHEST:
18113
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1312 times.
1312 if(temp_combo.usrflags & cflag7)
18114 temp_combo.usrflags |= cflag8;
18115 1312 else temp_combo.usrflags &= ~cflag8;
18116 1312 temp_combo.usrflags &= ~cflag7;
18117 1312 break;
18118 }
18119
2/2
✓ Branch 0 taken 66 times.
✓ Branch 1 taken 333672 times.
333738 switch(temp_combo.type)
18120 {
18121 case cCHEST: case cLOCKEDCHEST: case cBOSSCHEST:
18122 66 temp_combo.attrishorts[2] = -1;
18123 66 temp_combo.usrflags |= cflag7;
18124 66 break;
18125 }
18126 333738 }
18127
18128
2/4
✓ Branch 0 taken 333738 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 333738 times.
333738 if(keepdata==true && i>=start_combo)
18129 {
18130 333738 memcpy(&combobuf[i], &temp_combo, sizeof(temp_combo));
18131 333738 }
18132 333738 }
18133
18134
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 if(keepdata==true)
18135 {
18136
2/6
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 75 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
75 if((version < 0x192)|| ((version == 0x192)&&(build<185)))
18137 {
18138 for(int32_t tmpcounter=0; tmpcounter<MAXCOMBOS; tmpcounter++)
18139 {
18140 if(combobuf[tmpcounter].type==cHOOKSHOTONLY)
18141 {
18142 combobuf[tmpcounter].type=cLADDERHOOKSHOT;
18143 }
18144 }
18145 }
18146
18147 //June 3 2012; ladder only is broken in 2.10 and allows the hookshot also. -Gleeok
18148
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
75 if(version == 0x210 && !is_zquest())
18149 {
18150 for(int32_t tmpcounter=0; tmpcounter<MAXCOMBOS; tmpcounter++)
18151 if(combobuf[tmpcounter].type == cLADDERONLY)
18152 combobuf[tmpcounter].type = cLADDERHOOKSHOT;
18153 }
18154
18155
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(section_version<7)
18156 {
18157 for(int32_t tmpcounter=0; tmpcounter<MAXCOMBOS; tmpcounter++)
18158 {
18159 switch(combobuf[tmpcounter].type)
18160 {
18161 case cSLASH:
18162 combobuf[tmpcounter].type=cSLASHTOUCHY;
18163 break;
18164
18165 case cSLASHITEM:
18166 combobuf[tmpcounter].type=cSLASHITEMTOUCHY;
18167 break;
18168
18169 case cBUSH:
18170 combobuf[tmpcounter].type=cBUSHTOUCHY;
18171 break;
18172
18173 case cFLOWERS:
18174 combobuf[tmpcounter].type=cFLOWERSTOUCHY;
18175 break;
18176
18177 case cTALLGRASS:
18178 combobuf[tmpcounter].type=cTALLGRASSTOUCHY;
18179 break;
18180
18181 case cSLASHNEXT:
18182 combobuf[tmpcounter].type=cSLASHNEXTTOUCHY;
18183 break;
18184
18185 case cSLASHNEXTITEM:
18186 combobuf[tmpcounter].type=cSLASHNEXTITEMTOUCHY;
18187 break;
18188
18189 case cBUSHNEXT:
18190 combobuf[tmpcounter].type=cBUSHNEXTTOUCHY;
18191 break;
18192 }
18193 }
18194 }
18195
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 73 times.
75 if (section_version < 16)
18196 {
18197
2/2
✓ Branch 0 taken 4765440 times.
✓ Branch 1 taken 73 times.
4765513 for(int32_t tmpcounter=0; tmpcounter<MAXCOMBOS; tmpcounter++)
18198 {
18199
2/2
✓ Branch 0 taken 4761098 times.
✓ Branch 1 taken 4342 times.
4765440 if (combobuf[tmpcounter].type == cWATER)
18200 {
18201 4342 combobuf[tmpcounter].attributes[0] = 40000L;
18202 4342 }
18203 4765440 }
18204 73 }
18205
2/2
✓ Branch 0 taken 74 times.
✓ Branch 1 taken 1 times.
75 if(!get_bit(quest_rules,qr_ALLOW_EDITING_COMBO_0))
18206 {
18207 1 combobuf[0].walk = 0xF0;
18208 1 combobuf[0].type = 0;
18209 1 combobuf[0].flag = 0;
18210 1 }
18211 75 }
18212
18213 //Now for the new combo alias reset
18214
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
75 if(section_version<2 && keepdata)
18215 {
18216 for(int32_t j=0; j<MAXCOMBOALIASES; j++)
18217 {
18218 combo_aliases[j].width = 0;
18219 combo_aliases[j].height = 0;
18220 combo_aliases[j].layermask = 0;
18221
18222 if(combo_aliases[j].combos != NULL)
18223 {
18224 delete[] combo_aliases[j].combos;
18225 }
18226
18227 if(combo_aliases[j].csets != NULL)
18228 {
18229 delete[] combo_aliases[j].csets;
18230 }
18231
18232 combo_aliases[j].combos = new word[1];
18233 combo_aliases[j].csets = new byte[1];
18234 combo_aliases[j].combos[0] = 0;
18235 combo_aliases[j].csets[0] = 0;
18236 }
18237 }
18238
18239
18240 75 setup_combo_animations();
18241 75 setup_combo_animations2();
18242 75 return 0;
18243 75 }
18244 121250 int32_t readcombo_loop(PACKFILE* f, word s_version, newcombo& temp_combo)
18245 {
18246 byte combo_has_flags;
18247
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 121250 times.
121250 if(!p_getc(&combo_has_flags,f,true))
18248 return qe_invalid;
18249
18250 121250 temp_combo.clear();
18251
2/2
✓ Branch 0 taken 77739 times.
✓ Branch 1 taken 43511 times.
121250 if(combo_has_flags)
18252 {
18253
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 43508 times.
43511 if(combo_has_flags&CHAS_GENERAL)
18254 {
18255
1/2
✓ Branch 0 taken 43508 times.
✗ Branch 1 not taken.
43508 if(!p_igetl(&temp_combo.tile,f,true))
18256 {
18257 return qe_invalid;
18258 }
18259 43508 temp_combo.o_tile = temp_combo.tile;
18260
18261
1/2
✓ Branch 0 taken 43508 times.
✗ Branch 1 not taken.
43508 if(!p_getc(&temp_combo.flip,f,true))
18262 {
18263 return qe_invalid;
18264 }
18265
18266
1/2
✓ Branch 0 taken 43508 times.
✗ Branch 1 not taken.
43508 if(!p_getc(&temp_combo.walk,f,true))
18267 {
18268 return qe_invalid;
18269 }
18270
18271
1/2
✓ Branch 0 taken 43508 times.
✗ Branch 1 not taken.
43508 if(!p_getc(&temp_combo.type,f,true))
18272 {
18273 return qe_invalid;
18274 }
18275
18276
1/2
✓ Branch 0 taken 43508 times.
✗ Branch 1 not taken.
43508 if(!p_getc(&temp_combo.flag,f,true))
18277 {
18278 return qe_invalid;
18279 }
18280
18281
1/2
✓ Branch 0 taken 43508 times.
✗ Branch 1 not taken.
43508 if(!p_getc(&temp_combo.csets,f,true))
18282 {
18283 return qe_invalid;
18284 }
18285 43508 }
18286
2/2
✓ Branch 0 taken 43495 times.
✓ Branch 1 taken 16 times.
43511 if(combo_has_flags&CHAS_SCRIPT)
18287 {
18288
2/2
✓ Branch 0 taken 176 times.
✓ Branch 1 taken 16 times.
192 for ( int32_t q = 0; q < 11; q++ )
18289 {
18290
1/2
✓ Branch 0 taken 176 times.
✗ Branch 1 not taken.
176 if(!p_getc(&temp_combo.label[q],f,true))
18291 {
18292 return qe_invalid;
18293 }
18294 176 }
18295
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetw(&temp_combo.script,f,true)) return qe_invalid;
18296
2/2
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 16 times.
48 for ( int32_t q = 0; q < 2; q++ )
18297 {
18298
1/2
✓ Branch 0 taken 32 times.
✗ Branch 1 not taken.
32 if(!p_igetl(&temp_combo.initd[q],f,true))
18299 {
18300 return qe_invalid;
18301 }
18302 32 }
18303 16 }
18304
2/2
✓ Branch 0 taken 30945 times.
✓ Branch 1 taken 12566 times.
43511 if(combo_has_flags&CHAS_ANIM)
18305 {
18306
1/2
✓ Branch 0 taken 12566 times.
✗ Branch 1 not taken.
12566 if(!p_getc(&temp_combo.frames,f,true))
18307 {
18308 return qe_invalid;
18309 }
18310
18311
1/2
✓ Branch 0 taken 12566 times.
✗ Branch 1 not taken.
12566 if(!p_getc(&temp_combo.speed,f,true))
18312 {
18313 return qe_invalid;
18314 }
18315
18316
1/2
✓ Branch 0 taken 12566 times.
✗ Branch 1 not taken.
12566 if(!p_igetw(&temp_combo.nextcombo,f,true))
18317 {
18318 return qe_invalid;
18319 }
18320
18321
1/2
✓ Branch 0 taken 12566 times.
✗ Branch 1 not taken.
12566 if(!p_getc(&temp_combo.nextcset,f,true))
18322 {
18323 return qe_invalid;
18324 }
18325
18326
1/2
✓ Branch 0 taken 12566 times.
✗ Branch 1 not taken.
12566 if(!p_getc(&temp_combo.skipanim,f,true))
18327 {
18328 return qe_invalid;
18329 }
18330
18331
1/2
✓ Branch 0 taken 12566 times.
✗ Branch 1 not taken.
12566 if(!p_getc(&temp_combo.skipanimy,f,true))
18332 {
18333 return qe_invalid;
18334 }
18335
18336
1/2
✓ Branch 0 taken 12566 times.
✗ Branch 1 not taken.
12566 if(!p_getc(&temp_combo.animflags,f,true))
18337 {
18338 return qe_invalid;
18339 }
18340 12566 }
18341
2/2
✓ Branch 0 taken 39842 times.
✓ Branch 1 taken 3669 times.
43511 if(combo_has_flags&CHAS_ATTRIB)
18342 {
18343
2/2
✓ Branch 0 taken 14676 times.
✓ Branch 1 taken 3669 times.
18345 for ( int32_t q = 0; q < 4; q++ )
18344 {
18345
1/2
✓ Branch 0 taken 14676 times.
✗ Branch 1 not taken.
14676 if(!p_igetl(&temp_combo.attributes[q],f,true))
18346 {
18347 return qe_invalid;
18348 }
18349 14676 }
18350
2/2
✓ Branch 0 taken 29352 times.
✓ Branch 1 taken 3669 times.
33021 for ( int32_t q = 0; q < 8; q++ )
18351 {
18352
1/2
✓ Branch 0 taken 29352 times.
✗ Branch 1 not taken.
29352 if(!p_getc(&temp_combo.attribytes[q],f,true))
18353 {
18354 return qe_invalid;
18355 }
18356 29352 }
18357
2/2
✓ Branch 0 taken 29352 times.
✓ Branch 1 taken 3669 times.
33021 for ( int32_t q = 0; q < 8; q++ )
18358 {
18359
1/2
✓ Branch 0 taken 29352 times.
✗ Branch 1 not taken.
29352 if(!p_igetw(&temp_combo.attrishorts[q],f,true))
18360 {
18361 return qe_invalid;
18362 }
18363 29352 }
18364 3669 }
18365
2/2
✓ Branch 0 taken 42380 times.
✓ Branch 1 taken 1131 times.
43511 if(combo_has_flags&CHAS_FLAG)
18366 {
18367
1/2
✓ Branch 0 taken 1131 times.
✗ Branch 1 not taken.
1131 if(!p_igetl(&temp_combo.usrflags,f,true))
18368 {
18369 return qe_invalid;
18370 }
18371
1/2
✓ Branch 0 taken 1131 times.
✗ Branch 1 not taken.
1131 if(!p_igetw(&temp_combo.genflags,f,true))
18372 {
18373 return qe_invalid;
18374 }
18375 1131 }
18376
2/2
✓ Branch 0 taken 43267 times.
✓ Branch 1 taken 244 times.
43511 if(combo_has_flags&CHAS_TRIG)
18377 {
18378
2/2
✓ Branch 0 taken 732 times.
✓ Branch 1 taken 244 times.
976 for ( int32_t q = 0; q < 3; q++ )
18379 {
18380
1/2
✓ Branch 0 taken 732 times.
✗ Branch 1 not taken.
732 if(!p_igetl(&temp_combo.triggerflags[q],f,true))
18381 {
18382 return qe_invalid;
18383 }
18384 732 }
18385
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_igetl(&temp_combo.triggerlevel,f,true))
18386 {
18387 return qe_invalid;
18388 }
18389
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_getc(&temp_combo.triggerbtn,f,true))
18390 {
18391 return qe_invalid;
18392 }
18393
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_getc(&temp_combo.triggeritem,f,true))
18394 {
18395 return qe_invalid;
18396 }
18397
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_getc(&temp_combo.trigtimer,f,true))
18398 {
18399 return qe_invalid;
18400 }
18401
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_getc(&temp_combo.trigsfx,f,true))
18402 {
18403 return qe_invalid;
18404 }
18405
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_igetl(&temp_combo.trigchange,f,true))
18406 {
18407 return qe_invalid;
18408 }
18409
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_igetw(&temp_combo.trigprox,f,true))
18410 {
18411 return qe_invalid;
18412 }
18413
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_getc(&temp_combo.trigctr,f,true))
18414 {
18415 return qe_invalid;
18416 }
18417
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_igetl(&temp_combo.trigctramnt,f,true))
18418 {
18419 return qe_invalid;
18420 }
18421
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_getc(&temp_combo.triglbeam,f,true))
18422 {
18423 return qe_invalid;
18424 }
18425
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_getc(&temp_combo.trigcschange,f,true))
18426 {
18427 return qe_invalid;
18428 }
18429
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_igetw(&temp_combo.spawnitem,f,true))
18430 {
18431 return qe_invalid;
18432 }
18433
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_igetw(&temp_combo.spawnenemy,f,true))
18434 {
18435 return qe_invalid;
18436 }
18437
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_getc(&temp_combo.exstate,f,true))
18438 {
18439 return qe_invalid;
18440 }
18441
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_igetl(&temp_combo.spawnip,f,true))
18442 {
18443 return qe_invalid;
18444 }
18445
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_getc(&temp_combo.trigcopycat,f,true))
18446 {
18447 return qe_invalid;
18448 }
18449
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_getc(&temp_combo.trigcooldown,f,true))
18450 {
18451 return qe_invalid;
18452 }
18453
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 244 times.
244 if(s_version >= 35)
18454 {
18455
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_igetw(&temp_combo.prompt_cid,f,true))
18456 {
18457 return qe_invalid;
18458 }
18459
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_getc(&temp_combo.prompt_cs,f,true))
18460 {
18461 return qe_invalid;
18462 }
18463
1/2
✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
244 if(!p_igetw(&temp_combo.prompt_x,f,true))
18464 {
18465 return qe_invalid;
18466 }
18467
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 244 times.
244 if(!p_igetw(&temp_combo.prompt_y,f,true))
18468 {
18469 return qe_invalid;
18470 }
18471 244 }
18472 244 }
18473
2/2
✓ Branch 0 taken 43447 times.
✓ Branch 1 taken 64 times.
43511 if(combo_has_flags&CHAS_LIFT)
18474 {
18475
1/2
✓ Branch 0 taken 64 times.
✗ Branch 1 not taken.
64 if(!p_igetw(&temp_combo.liftcmb,f,true))
18476 return qe_invalid;
18477
1/2
✓ Branch 0 taken 64 times.
✗ Branch 1 not taken.
64 if(!p_getc(&temp_combo.liftcs,f,true))
18478 return qe_invalid;
18479
1/2
✓ Branch 0 taken 64 times.
✗ Branch 1 not taken.
64 if(!p_igetw(&temp_combo.liftundercmb,f,true))
18480 return qe_invalid;
18481
1/2
✓ Branch 0 taken 64 times.
✗ Branch 1 not taken.
64 if(!p_getc(&temp_combo.liftundercs,f,true))
18482 return qe_invalid;
18483
1/2
✓ Branch 0 taken 64 times.
✗ Branch 1 not taken.
64 if(!p_getc(&temp_combo.liftdmg,f,true))
18484 return qe_invalid;
18485
1/2
✓ Branch 0 taken 64 times.
✗ Branch 1 not taken.
64 if(!p_getc(&temp_combo.liftlvl,f,true))
18486 return qe_invalid;
18487
1/2
✓ Branch 0 taken 64 times.
✗ Branch 1 not taken.
64 if(!p_getc(&temp_combo.liftitm,f,true))
18488 return qe_invalid;
18489
1/2
✓ Branch 0 taken 64 times.
✗ Branch 1 not taken.
64 if(!p_getc(&temp_combo.liftflags,f,true))
18490 return qe_invalid;
18491
1/2
✓ Branch 0 taken 64 times.
✗ Branch 1 not taken.
64 if(!p_getc(&temp_combo.liftgfx,f,true))
18492 return qe_invalid;
18493
1/2
✓ Branch 0 taken 64 times.
✗ Branch 1 not taken.
64 if(!p_getc(&temp_combo.liftsprite,f,true))
18494 return qe_invalid;
18495
1/2
✓ Branch 0 taken 64 times.
✗ Branch 1 not taken.
64 if(!p_getc(&temp_combo.liftsfx,f,true))
18496 return qe_invalid;
18497
1/2
✓ Branch 0 taken 64 times.
✗ Branch 1 not taken.
64 if(!p_igetw(&temp_combo.liftbreaksprite,f,true))
18498 return qe_invalid;
18499
1/2
✓ Branch 0 taken 64 times.
✗ Branch 1 not taken.
64 if(!p_getc(&temp_combo.liftbreaksfx,f,true))
18500 return qe_invalid;
18501
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 64 times.
64 if(s_version >= 34)
18502 {
18503
1/2
✓ Branch 0 taken 64 times.
✗ Branch 1 not taken.
64 if(!p_getc(&temp_combo.lifthei,f,true))
18504 return qe_invalid;
18505
1/2
✓ Branch 0 taken 64 times.
✗ Branch 1 not taken.
64 if(!p_getc(&temp_combo.lifttime,f,true))
18506 return qe_invalid;
18507 64 }
18508 64 }
18509 43511 }
18510 121250 return 0;
18511 121250 }
18512 93 int32_t readcombos(PACKFILE *f, zquestheader *Header, word version, word build, word start_combo, word max_combos, bool keepdata)
18513 {
18514 93 word section_version=0;
18515 93 word section_cversion=0;
18516 93 word combos_used=0;
18517 int32_t dummy;
18518 byte padding;
18519 93 newcombo temp_combo;
18520
18521 93 reset_combo_animations();
18522 93 reset_combo_animations2();
18523 93 init_combo_classes();
18524
18525
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata==true) //reset combos
18526 {
18527
2/2
✓ Branch 0 taken 6071040 times.
✓ Branch 1 taken 93 times.
6071133 for(int32_t q = start_combo; q < start_combo+max_combos; ++q)
18528 6071040 combobuf[q].clear();
18529 93 }
18530
18531
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(version > 0x192) //Version info
18532 {
18533
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&section_version,f,true))
18534 {
18535 return qe_invalid;
18536 }
18537 93 FFCore.quest_format[vCombos] = section_version;
18538
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&section_cversion,f,true))
18539 {
18540 return qe_invalid;
18541 }
18542
18543 //section size
18544
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&dummy,f,true))
18545 {
18546 return qe_invalid;
18547 }
18548 93 }
18549
18550
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 75 times.
93 if(section_version > 32) //Cleanup time!
18551 {
18552
1/2
✓ Branch 0 taken 18 times.
✗ Branch 1 not taken.
18 if(!p_igetw(&combos_used,f,true))
18553 {
18554 return qe_invalid;
18555 }
18556
2/2
✓ Branch 0 taken 121250 times.
✓ Branch 1 taken 18 times.
121268 for(int32_t i=0; i<combos_used; i++)
18557 {
18558 121250 auto ret = readcombo_loop(f,section_version,temp_combo);
18559
1/2
✓ Branch 0 taken 121250 times.
✗ Branch 1 not taken.
121250 if(ret) return ret;
18560
2/4
✓ Branch 0 taken 121250 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 121250 times.
121250 if(keepdata==true && i>=start_combo)
18561 121250 memcpy(&combobuf[i], &temp_combo, sizeof(temp_combo));
18562 121250 }
18563 18 }
18564 else //Call the old function for all old versions
18565 {
18566 75 auto ret = readcombos_old(section_version,f,Header,version,build,start_combo,max_combos,keepdata);
18567
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 if(ret) return ret; //error, end read
18568 }
18569
18570
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(keepdata && false/*section_version < 34*/)
18571 {
18572 for(int32_t i=start_combo; i<combos_used; i++)
18573 {
18574 newcombo& cmb = combobuf[i];
18575 //Do anything to 'cmb' needed for version handling
18576 }
18577 }
18578
18579
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata==true)
18580 {
18581
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 75 times.
93 if(!get_bit(quest_rules,qr_ALLOW_EDITING_COMBO_0))
18582 {
18583 18 combobuf[0].walk = 0xF0;
18584 18 combobuf[0].type = 0;
18585 18 combobuf[0].flag = 0;
18586 18 }
18587 93 }
18588
18589 93 setup_combo_animations();
18590 93 setup_combo_animations2();
18591 93 return 0;
18592 93 }
18593
18594 93 int32_t readcomboaliases(PACKFILE *f, zquestheader *Header, word version, word build, bool keepdata)
18595 {
18596 //these are here to bypass compiler warnings about unused arguments
18597 93 Header=Header;
18598 93 version=version;
18599 93 build=build;
18600
18601 int32_t dummy;
18602 93 word sversion=0, c_sversion;
18603
18604 //section version info
18605
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(!p_igetw(&sversion,f,true))
18606 {
18607 return qe_invalid;
18608 }
18609
18610 93 FFCore.quest_format[vComboAliases] = sversion;
18611
18612 //al_trace("Combo aliases version %d\n", sversion);
18613
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&c_sversion,f,true))
18614 {
18615 return qe_invalid;
18616 }
18617
18618 //section size
18619
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&dummy,f,true))
18620 {
18621 return qe_invalid;
18622 }
18623
18624 93 int32_t max_num_combo_aliases = MAXCOMBOALIASES;
18625
18626
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(sversion < 3) // max saved combo alias' upped from 256 to 2048.
18627 {
18628 73 max_num_combo_aliases = MAX250COMBOALIASES;
18629 73 }
18630
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(sversion < 2) // max saved combo alias' upped from 256 to 2048.
18631 {
18632 max_num_combo_aliases = OLDMAXCOMBOALIASES;
18633 }
18634
18635
2/2
✓ Branch 0 taken 313344 times.
✓ Branch 1 taken 93 times.
313437 for(int32_t j=0; j<max_num_combo_aliases; j++)
18636 {
18637 byte width,height,mask,tempcset;
18638 int32_t count;
18639 word tempword;
18640 byte tempbyte;
18641
18642
1/2
✓ Branch 0 taken 313344 times.
✗ Branch 1 not taken.
313344 if(!p_igetw(&tempword,f,true))
18643 {
18644 return qe_invalid;
18645 }
18646
18647
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 313344 times.
313344 if(keepdata)
18648 {
18649 313344 combo_aliases[j].combo = tempword;
18650 313344 }
18651
18652
1/2
✓ Branch 0 taken 313344 times.
✗ Branch 1 not taken.
313344 if(!p_getc(&tempbyte,f,true))
18653 {
18654 return qe_invalid;
18655 }
18656
18657
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 313344 times.
313344 if(keepdata)
18658 {
18659 313344 combo_aliases[j].cset = tempbyte;
18660 313344 }
18661
18662
1/2
✓ Branch 0 taken 313344 times.
✗ Branch 1 not taken.
313344 if(!p_getc(&width,f,true))
18663 {
18664 return qe_invalid;
18665 }
18666
18667
1/2
✓ Branch 0 taken 313344 times.
✗ Branch 1 not taken.
313344 if(!p_getc(&height,f,true))
18668 {
18669 return qe_invalid;
18670 }
18671
18672
1/2
✓ Branch 0 taken 313344 times.
✗ Branch 1 not taken.
313344 if(!p_getc(&mask,f,true))
18673 {
18674 return qe_invalid;
18675 }
18676
18677 313344 count=(width+1)*(height+1)*(comboa_lmasktotal(mask)+1);
18678
18679
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 313344 times.
313344 if(keepdata)
18680 {
18681
1/2
✓ Branch 0 taken 313344 times.
✗ Branch 1 not taken.
313344 if(combo_aliases[j].combos != NULL)
18682 {
18683
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 313344 times.
313344 delete[] combo_aliases[j].combos;
18684 313344 }
18685
18686
1/2
✓ Branch 0 taken 313344 times.
✗ Branch 1 not taken.
313344 if(combo_aliases[j].csets != NULL)
18687 {
18688
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 313344 times.
313344 delete[] combo_aliases[j].csets;
18689 313344 }
18690
18691 313344 combo_aliases[j].width = width;
18692 313344 combo_aliases[j].height = height;
18693 313344 combo_aliases[j].layermask = mask;
18694 313344 combo_aliases[j].combos = new word[count];
18695 313344 combo_aliases[j].csets = new byte[count];
18696 313344 }
18697
18698
2/2
✓ Branch 0 taken 320589 times.
✓ Branch 1 taken 313344 times.
633933 for(int32_t k=0; k<count; k++)
18699 {
18700
1/2
✓ Branch 0 taken 320589 times.
✗ Branch 1 not taken.
320589 if(!p_igetw(&tempword,f,true))
18701 {
18702 return qe_invalid;
18703 }
18704
18705
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 320589 times.
320589 if(keepdata)
18706 {
18707 320589 combo_aliases[j].combos[k] = tempword;
18708 320589 }
18709 320589 }
18710
18711
2/2
✓ Branch 0 taken 320589 times.
✓ Branch 1 taken 313344 times.
633933 for(int32_t k=0; k<count; k++)
18712 {
18713
1/2
✓ Branch 0 taken 320589 times.
✗ Branch 1 not taken.
320589 if(!p_getc(&tempcset,f,true))
18714 {
18715 return qe_invalid;
18716 }
18717
18718
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 320589 times.
320589 if(keepdata)
18719 {
18720 320589 combo_aliases[j].csets[k] = tempcset;
18721 320589 }
18722 320589 }
18723 313344 }
18724
18725 93 word num_combo_pools = 0;
18726
2/2
✓ Branch 0 taken 75 times.
✓ Branch 1 taken 18 times.
93 if(sversion >= 4)
18727 {
18728
1/2
✓ Branch 0 taken 18 times.
✗ Branch 1 not taken.
18 if(!p_igetw(&num_combo_pools,f,true))
18729 {
18730 return qe_invalid;
18731 }
18732 18 }
18733
18734
2/2
✓ Branch 0 taken 761856 times.
✓ Branch 1 taken 93 times.
761949 for(combo_pool& pool : combo_pools)
18735 {
18736 761856 pool.clear();
18737 }
18738
18739 93 combo_pool temp_cpool;
18740
2/2
✓ Branch 0 taken 48 times.
✓ Branch 1 taken 93 times.
141 for(word cp = 0; cp < num_combo_pools; ++cp)
18741 {
18742 48 int32_t num_combos_in_pool = 0;
18743
2/4
✓ Branch 0 taken 48 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 48 times.
✗ Branch 3 not taken.
48 if(!p_igetl(&num_combos_in_pool,f,true))
18744 {
18745 return qe_invalid;
18746 }
18747
1/2
✓ Branch 0 taken 48 times.
✗ Branch 1 not taken.
48 if(num_combos_in_pool < 1) continue; //nothing to read
18748
18749
1/2
✓ Branch 0 taken 48 times.
✗ Branch 1 not taken.
48 temp_cpool.clear();
18750
18751 int32_t cp_cid; int8_t cp_cs; word cp_quant;
18752
2/2
✓ Branch 0 taken 208 times.
✓ Branch 1 taken 48 times.
256 for(auto q = 0; q < num_combos_in_pool; ++q)
18753 {
18754
2/4
✓ Branch 0 taken 208 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 208 times.
✗ Branch 3 not taken.
208 if(!p_igetl(&cp_cid,f,true))
18755 {
18756 return qe_invalid;
18757 }
18758
2/4
✓ Branch 0 taken 208 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 208 times.
✗ Branch 3 not taken.
208 if(!p_getc(&cp_cs,f,true))
18759 {
18760 return qe_invalid;
18761 }
18762
2/4
✓ Branch 0 taken 208 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 208 times.
✗ Branch 3 not taken.
208 if(!p_igetw(&cp_quant,f,true))
18763 {
18764 return qe_invalid;
18765 }
18766
1/2
✓ Branch 0 taken 208 times.
✗ Branch 1 not taken.
208 temp_cpool.add(cp_cid, cp_cs, cp_quant);
18767 208 }
18768
18769
1/2
✓ Branch 0 taken 48 times.
✗ Branch 1 not taken.
48 if(keepdata)
18770 {
18771
1/2
✓ Branch 0 taken 48 times.
✗ Branch 1 not taken.
48 combo_pools[cp] = temp_cpool;
18772 48 }
18773 48 }
18774
18775 93 return 0;
18776 93 }
18777
18778 93 int32_t readcolordata(PACKFILE *f, miscQdata *Misc, word version, word build, word start_cset, word max_csets, bool keepdata)
18779 {
18780 //these are here to bypass compiler warnings about unused arguments
18781
18782 //THE *48 REFERS TO EACH CSET BEING 16 COLORS with 3 VALUES OF RGB (3*16 is 48)
18783 //Capitalized cause it'll save you a headache. -Deedee
18784 93 start_cset=start_cset;
18785 93 max_csets=max_csets;
18786 93 word s_version=0;
18787
18788 miscQdata temp_misc;
18789 93 memcpy(&temp_misc, Misc, sizeof(temp_misc));
18790
18791 byte temp_colordata[48];
18792 char temp_palname[PALNAMESIZE];
18793
18794 int32_t dummy;
18795 word palcycles;
18796
18797
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(version > 0x192)
18798 {
18799 //section version info
18800
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_version,f,true))
18801 {
18802 return qe_invalid;
18803 }
18804
18805 93 FFCore.quest_format[vCSets] = s_version;
18806
18807 //al_trace("Color data version %d\n", s_version);
18808
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&dummy,f,true))
18809 {
18810 return qe_invalid;
18811 }
18812
18813 //section size
18814
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&dummy,f,true))
18815 {
18816 return qe_invalid;
18817 }
18818 93 }
18819
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if (s_version < 5)
18820 {
18821
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 73 times.
✗ Branch 3 not taken.
73 bool RealOldVerion = ((version < 0x192)||((version == 0x192)&&(build<73)));
18822
18823 //finally... section data
18824 73 int32_t q = 0;
18825 73 int32_t p = -15;
18826
2/2
✓ Branch 0 taken 17520 times.
✓ Branch 1 taken 73 times.
17593 for(int32_t i=0; i<oldpdTOTAL; ++i)
18827 {
18828 17520 memset(temp_colordata, 0, 48);
18829
18830
1/2
✓ Branch 0 taken 17520 times.
✗ Branch 1 not taken.
17520 if(!pfread(temp_colordata,48,f,true))
18831 {
18832 return qe_invalid;
18833 }
18834
18835
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17520 times.
17520 if(keepdata==true)
18836 {
18837 17520 memcpy(&colordata[q*48], temp_colordata, 48);
18838 17520 }
18839 17520 ++q;
18840
7/8
✓ Branch 0 taken 16352 times.
✓ Branch 1 taken 1168 times.
✓ Branch 2 taken 1241 times.
✓ Branch 3 taken 15111 times.
✓ Branch 4 taken 146 times.
✓ Branch 5 taken 1095 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 146 times.
17520 if (p > 0 && (p%13)==12 && (i < oldpoSPRITE || !RealOldVerion)) //It's > 0 instead of >= 0 because it should append
18841 {
18842
1/2
✓ Branch 0 taken 1241 times.
✗ Branch 1 not taken.
1241 if (s_version < 5) //Bumping up the size of level palettes
18843 {
18844
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1241 times.
1241 if(keepdata==true)
18845 {
18846 1241 memcpy(&colordata[(q)*48], &colordata[1*48], 48);
18847 1241 memcpy(&colordata[(q+1)*48], &colordata[5*48], 48);
18848 1241 memcpy(&colordata[(q+2)*48], &colordata[7*48], 48);
18849 1241 memcpy(&colordata[(q+3)*48], &colordata[8*48], 48);
18850 1241 }
18851 1241 q+=4;
18852 1241 }
18853 else
18854 {
18855 for(int m = 0; m < 4; ++m)
18856 {
18857 memset(temp_colordata, 0, 48);
18858 if(!pfread(temp_colordata,48,f,true))
18859 {
18860 return qe_invalid;
18861 }
18862 if(keepdata==true)
18863 {
18864 memcpy(&colordata[q*48], temp_colordata, 48);
18865 }
18866 ++q;
18867 }
18868 }
18869 1241 }
18870 17520 ++p;
18871 17520 }
18872
18873
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(RealOldVerion)
18874 {
18875 if(keepdata==true)
18876 {
18877 memcpy(colordata+(poSPRITE255*48), colordata+((q-30)*48), 30*16*3);
18878 memset(colordata+((q-30)*48), 0, ((poSPRITE255-(q-30))*48));
18879 memcpy(colordata+((poSPRITE255+11)*48), colordata+((poSPRITE255+10)*48), 48);
18880 memcpy(colordata+((poSPRITE255+10)*48), colordata+((poSPRITE255+9)*48), 48);
18881 memcpy(colordata+((poSPRITE255+9)*48), colordata+((poSPRITE255+8)*48), 48);
18882 memset(colordata+((poSPRITE255+8)*48), 0, 48);
18883 }
18884 }
18885 else
18886 {
18887 73 memset(temp_colordata, 0, 48);
18888
18889
2/2
✓ Branch 0 taken 228709 times.
✓ Branch 1 taken 73 times.
228782 for(int32_t i=0; i<newpdTOTAL-oldpdTOTAL; ++i)
18890 {
18891
1/2
✓ Branch 0 taken 228709 times.
✗ Branch 1 not taken.
228709 if(!pfread(temp_colordata,48,f,true))
18892 {
18893 return qe_invalid;
18894 }
18895
18896
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 228709 times.
228709 if(keepdata==true)
18897 {
18898 228709 memcpy(&colordata[q*48], temp_colordata, 48);
18899 228709 }
18900 228709 ++q;
18901
6/8
✓ Branch 0 taken 228709 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17593 times.
✓ Branch 3 taken 211116 times.
✓ Branch 4 taken 146 times.
✓ Branch 5 taken 17447 times.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
228709 if (p > 0 && (p%13)==12 && (i < (newpoSPRITE-oldpdTOTAL) || (s_version >= 4))) //It's > 0 instead of >= 0 because it should append
18902 {
18903
1/2
✓ Branch 0 taken 17593 times.
✗ Branch 1 not taken.
17593 if (s_version < 5) //Bumping up the size of level palettes
18904 {
18905
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17593 times.
17593 if(keepdata==true)
18906 {
18907 17593 memcpy(&colordata[(q)*48], &colordata[1*48], 48);
18908 17593 memcpy(&colordata[(q+1)*48], &colordata[5*48], 48);
18909 17593 memcpy(&colordata[(q+2)*48], &colordata[7*48], 48);
18910 17593 memcpy(&colordata[(q+3)*48], &colordata[8*48], 48);
18911 17593 }
18912 17593 q+=4;
18913 17593 }
18914 else
18915 {
18916 for(int m = 0; m < 4; ++m)
18917 {
18918 memset(temp_colordata, 0, 48);
18919 if(!pfread(temp_colordata,48,f,true))
18920 {
18921 return qe_invalid;
18922 }
18923 if(keepdata==true)
18924 {
18925 memcpy(&colordata[q*48], temp_colordata, 48);
18926 }
18927 ++q;
18928 }
18929 }
18930 17593 }
18931 228709 ++p;
18932 228709 }
18933
18934
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 73 times.
73 if(s_version < 4)
18935 {
18936 if(keepdata==true)
18937 {
18938 memcpy(colordata+(poSPRITE255*48), colordata+((q-30)*48), 30*16*3);
18939 memset(colordata+((q-30)*48), 0, ((poSPRITE255-(q-30))*48));
18940 }
18941 }
18942 else
18943 {
18944
2/2
✓ Branch 0 taken 242944 times.
✓ Branch 1 taken 73 times.
243017 for(int32_t i=0; i<newerpdTOTAL-newpdTOTAL; ++i)
18945 {
18946
1/2
✓ Branch 0 taken 242944 times.
✗ Branch 1 not taken.
242944 if(!pfread(temp_colordata,48,f,true))
18947 {
18948 return qe_invalid;
18949 }
18950
18951
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 242944 times.
242944 if(keepdata==true)
18952 {
18953 242944 memcpy(&colordata[q*48], temp_colordata, 48);
18954 242944 }
18955 242944 ++q;
18956
5/6
✓ Branch 0 taken 242944 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 18688 times.
✓ Branch 3 taken 224256 times.
✓ Branch 4 taken 146 times.
✓ Branch 5 taken 18542 times.
242944 if (p > 0 && (p%13)==12 && i < newerpoSPRITE-newpdTOTAL) //It's > 0 instead of >= 0 because it should append
18957 {
18958
1/2
✓ Branch 0 taken 18542 times.
✗ Branch 1 not taken.
18542 if (s_version < 5) //Bumping up the size of level palettes
18959 {
18960
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 18542 times.
18542 if(keepdata==true)
18961 {
18962 18542 memcpy(&colordata[(q)*48], &colordata[1*48], 48);
18963 18542 memcpy(&colordata[(q+1)*48], &colordata[5*48], 48);
18964 18542 memcpy(&colordata[(q+2)*48], &colordata[7*48], 48);
18965 18542 memcpy(&colordata[(q+3)*48], &colordata[8*48], 48);
18966 18542 }
18967 18542 q+=4;
18968 18542 }
18969 else
18970 {
18971 for(int m = 0; m < 4; ++m)
18972 {
18973 memset(temp_colordata, 0, 48);
18974 if(!pfread(temp_colordata,48,f,true))
18975 {
18976 return qe_invalid;
18977 }
18978 if(keepdata==true)
18979 {
18980 memcpy(&colordata[q*48], temp_colordata, 48);
18981 }
18982 ++q;
18983 }
18984 }
18985 18542 }
18986 242944 ++p;
18987 242944 }
18988
18989 //By this point, q should be about equal to pdTOTAL255. If it isn't, I've fucked up. -Deedee
18990 }
18991 }
18992 73 }
18993 else
18994 {
18995
2/2
✓ Branch 0 taken 174980 times.
✓ Branch 1 taken 20 times.
175000 for(int32_t i=0; i<pdTOTAL255; ++i)
18996 {
18997 174980 memset(temp_colordata, 0, 48);
18998
18999
1/2
✓ Branch 0 taken 174980 times.
✗ Branch 1 not taken.
174980 if(!pfread(temp_colordata,48,f,true))
19000 {
19001 return qe_invalid;
19002 }
19003
19004
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 174980 times.
174980 if(keepdata==true)
19005 {
19006 174980 memcpy(&colordata[i*48], temp_colordata, 48);
19007 174980 }
19008 174980 }
19009 }
19010
19011
2/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if((version < 0x192)||((version == 0x192)&&(build<76)))
19012 {
19013 if(keepdata==true)
19014 {
19015 init_palnames();
19016 }
19017 }
19018 else
19019 {
19020 93 int32_t palnamestoread = 0;
19021
19022
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(s_version < 3)
19023 palnamestoread = OLDMAXLEVELS;
19024 else
19025 93 palnamestoread = 512;
19026
19027
2/2
✓ Branch 0 taken 47616 times.
✓ Branch 1 taken 93 times.
47709 for(int32_t i=0; i<palnamestoread; ++i)
19028 {
19029 47616 memset(temp_palname, 0, PALNAMESIZE);
19030
19031
1/2
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
47616 if(!pfread(temp_palname,PALNAMESIZE,f,true))
19032 {
19033 return qe_invalid;
19034 }
19035
19036
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 47616 times.
47616 if(keepdata==true)
19037 {
19038 47616 memcpy(palnames[i], temp_palname, PALNAMESIZE);
19039 47616 }
19040 47616 }
19041
19042
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata)
19043 {
19044
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 for(int32_t i=palnamestoread; i<MAXLEVELS; i++)
19045 {
19046 memset(palnames[i], 0, PALNAMESIZE);
19047 }
19048 93 }
19049 }
19050
19051
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(version > 0x192)
19052 {
19053
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<256; i++)
19054 {
19055
2/2
✓ Branch 0 taken 71424 times.
✓ Branch 1 taken 23808 times.
95232 for(int32_t j=0; j<3; j++)
19056 {
19057 71424 temp_misc.cycles[i][j].first=0;
19058 71424 temp_misc.cycles[i][j].count=0;
19059 71424 temp_misc.cycles[i][j].speed=0;
19060 71424 }
19061 23808 }
19062
19063
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&palcycles,f,true))
19064 {
19065 return qe_invalid;
19066 }
19067
19068
2/2
✓ Branch 0 taken 3070 times.
✓ Branch 1 taken 93 times.
3163 for(int32_t i=0; i<palcycles; i++)
19069 {
19070
2/2
✓ Branch 0 taken 9210 times.
✓ Branch 1 taken 3070 times.
12280 for(int32_t j=0; j<3; j++)
19071 {
19072
1/2
✓ Branch 0 taken 9210 times.
✗ Branch 1 not taken.
9210 if(!p_getc(&temp_misc.cycles[i][j].first,f,true))
19073 {
19074 return qe_invalid;
19075 }
19076 9210 }
19077
19078
2/2
✓ Branch 0 taken 9210 times.
✓ Branch 1 taken 3070 times.
12280 for(int32_t j=0; j<3; j++)
19079 {
19080
1/2
✓ Branch 0 taken 9210 times.
✗ Branch 1 not taken.
9210 if(!p_getc(&temp_misc.cycles[i][j].count,f,true))
19081 {
19082 return qe_invalid;
19083 }
19084 9210 }
19085
19086
2/2
✓ Branch 0 taken 9210 times.
✓ Branch 1 taken 3070 times.
12280 for(int32_t j=0; j<3; j++)
19087 {
19088
1/2
✓ Branch 0 taken 9210 times.
✗ Branch 1 not taken.
9210 if(!p_getc(&temp_misc.cycles[i][j].speed,f,true))
19089 {
19090 return qe_invalid;
19091 }
19092 9210 }
19093 3070 }
19094
19095
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata==true)
19096 {
19097 93 memcpy(Misc, &temp_misc, sizeof(temp_misc));
19098 93 }
19099 93 }
19100
19101 93 return 0;
19102 93 }
19103
19104 93 int32_t readtiles(PACKFILE *f, tiledata *buf, zquestheader *Header, word version, word build, word start_tile, int32_t max_tiles, bool from_init, bool keepdata)
19105 {
19106 93 int32_t tiles_used=0;
19107 93 word section_version = 0;
19108 93 word section_cversion = 0;
19109 93 int32_t section_size= 0;
19110 93 byte *temp_tile = new byte[tilesize(tf32Bit)];
19111
19112 //Tile Expansion
19113 //if ( version >= 0x254 && build >= 41 )
19114
3/4
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 73 times.
93 if (version < 0x254 && build < 41)
19115 {
19116 //al_trace("Build was < 41 when reading tiles\n");
19117 73 max_tiles = ZC250MAXTILES;
19118 73 }
19119
19120 //al_trace("Max Tiles: %d\n", max_tiles);
19121
19122
2/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if(Header!=NULL&&(!Header->data_flags[ZQ_TILES]&&!from_init)) //keep for old quests
19123 {
19124 if(keepdata==true)
19125 {
19126 if(!init_tiles(true, Header))
19127 {
19128 al_trace("Unable to initialize tiles\n");
19129 }
19130 }
19131
19132 delete[] temp_tile;
19133 temp_tile=NULL;
19134 return 0;
19135 }
19136 else
19137 {
19138
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(version > 0x192)
19139 {
19140 //section version info
19141
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&section_version,f,true))
19142 {
19143 delete[] temp_tile;
19144 return qe_invalid;
19145 }
19146
19147 93 FFCore.quest_format[vTiles] = section_version;
19148
19149
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&section_cversion,f,true))
19150 {
19151 delete[] temp_tile;
19152 return qe_invalid;
19153 }
19154
19155 //section size
19156
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&section_size,f,true))
19157 {
19158 delete[] temp_tile;
19159 return qe_invalid;
19160 }
19161 93 }
19162
19163 //if ( build < 41 )
19164 //{
19165 // tiles_used = ZC250MAXTILES;
19166 //}
19167
19168
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(version < 0x174)
19169 {
19170 tiles_used=TILES_PER_PAGE*4;
19171 } //no expanded tile space
19172
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 else if(version < 0x191)
19173 {
19174 tiles_used=OLDMAXTILES;
19175 }
19176 else
19177 {
19178 //finally... section data
19179
3/4
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 20 times.
93 if ( version >= 0x254 && build >= 41 ) //read and write the size of tiles_used properly
19180 {
19181
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(!p_igetl(&tiles_used,f,true))
19182 {
19183 delete[] temp_tile;
19184 return qe_invalid;
19185 }
19186 20 }
19187 else
19188 {
19189
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 if(!p_igetw(&tiles_used,f,true))
19190 {
19191 delete[] temp_tile;
19192 return qe_invalid;
19193 }
19194 }
19195 }
19196
19197
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 tiles_used=zc_min(tiles_used, max_tiles);
19198
19199 //if ( version < 0x254 || ( version >= 0x254 && build < 41 )) //don't do this, it crashes ZQuest. -Z
19200 //if ( version < 0x254 && build < 41 )
19201
3/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 20 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if ( version < 0x254 || (version == 0x254 && build < 41) )
19202 //if ( build < 41 )
19203 {
19204
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 tiles_used=zc_min(tiles_used, ZC250MAXTILES-start_tile);
19205 73 }
19206 else //2.55
19207 {
19208
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 tiles_used = zc_min(tiles_used,NEWMAXTILES-start_tile);
19209 }
19210
19211 //if ( section_version > 1 ) tiles_used = NEWMAXTILES;
19212
19213 //al_trace("tiles_used = %d\n", tiles_used);
19214
19215
2/2
✓ Branch 0 taken 2076637 times.
✓ Branch 1 taken 93 times.
2076730 for(int32_t i=0; i<tiles_used; ++i)
19216 {
19217 2076637 byte format=tf4Bit;
19218 2076637 memset(temp_tile, 0, tilesize(tf32Bit));
19219
19220
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 2076637 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
2076637 if((version>0x211)||((version==0x211)&&(build>4)))
19221 {
19222
1/2
✓ Branch 0 taken 2076637 times.
✗ Branch 1 not taken.
2076637 if(!p_getc(&format,f,true))
19223 {
19224 delete[] temp_tile;
19225 return qe_invalid;
19226 }
19227 2076637 }
19228
4/4
✓ Branch 0 taken 522876 times.
✓ Branch 1 taken 1553761 times.
✓ Branch 2 taken 259204 times.
✓ Branch 3 taken 263672 times.
2076637 if(section_version > 2 && !format)
19229 {
19230
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 263672 times.
263672 if(keepdata)
19231 {
19232 263672 reset_tile(buf,start_tile+i,tf4Bit);
19233 263672 }
19234 263672 continue;
19235 }
19236
19237
1/2
✓ Branch 0 taken 1812965 times.
✗ Branch 1 not taken.
1812965 if(!pfread(temp_tile,tilesize(format),f,true))
19238 {
19239 delete[] temp_tile;
19240 return qe_invalid;
19241 }
19242
19243
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1812965 times.
1812965 if(keepdata==true)
19244 {
19245 1812965 buf[start_tile+i].format=format;
19246
19247
1/2
✓ Branch 0 taken 1812965 times.
✗ Branch 1 not taken.
1812965 if(buf[start_tile+i].data)
19248 {
19249 1812965 free(buf[start_tile+i].data);
19250 1812965 buf[start_tile+i].data=NULL;
19251 1812965 }
19252
19253 1812965 buf[start_tile+i].data=(byte *)malloc(tilesize(buf[start_tile+i].format));
19254 1812965 memcpy(buf[start_tile+i].data,temp_tile,tilesize(buf[start_tile+i].format));
19255 1812965 }
19256 1812965 }
19257 }
19258
19259
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if ( section_version < 2 ) //write blank tile data --check s_version with this again instead?
19260 {
19261 //al_trace("Writing blank tile data to new tiles for build < 41\n");
19262
2/2
✓ Branch 0 taken 10875540 times.
✓ Branch 1 taken 73 times.
10875613 for ( int32_t q = ZC250MAXTILES; q < NEWMAXTILES; ++q )
19263 {
19264
19265 //memcpy(buf[q].data,temp_tile,tilesize(buf[q].format));
19266 10875540 reset_tile(buf,q,tf4Bit);
19267
19268
19269 /*
19270
19271 byte tempbyte;
19272 for(int32_t i=0; i<tilesize(tf4Bit); i++)
19273 {
19274 tempbyte=buf[ZC250MAXTILES-1].data[i];
19275 buf[q].data[i] = tempbyte;
19276 }
19277 //int32_t temp = tempbyte=buf[130].data[i];
19278 //buf[q].data = buf[ZC250MAXTILES-1].data;
19279 */
19280 //reset_tile(buf,q,tf4Bit);
19281 10875540 }
19282
19283 73 }
19284
19285
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata==true)
19286 {
19287
4/6
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
93 if ( version < 0x254 || ( version >= 0x254 && build < 41 ))
19288 {
19289
2/2
✓ Branch 0 taken 3578131 times.
✓ Branch 1 taken 73 times.
3578204 for(int32_t i=start_tile+tiles_used; i<max_tiles; ++i)
19290 {
19291 //al_trace("Resetting tiles for ZC250MAXTILES, iteration: %d\n", i);
19292 3578131 reset_tile(buf,i,tf4Bit);
19293 3578131 }
19294 73 }
19295 else
19296 {
19297
2/2
✓ Branch 0 taken 3418192 times.
✓ Branch 1 taken 20 times.
3418212 for(int32_t i=start_tile+tiles_used; i<max_tiles; ++i)
19298 {
19299 //al_trace("Resetting tiles for build 41+\n");
19300 3418192 reset_tile(buf,i,tf4Bit);
19301 3418192 }
19302 }
19303
19304
2/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if((version < 0x192)|| ((version == 0x192)&&(build<186)))
19305 {
19306 if(get_bit(quest_rules,qr_BSZELDA)) //
19307 {
19308 byte tempbyte;
19309 int32_t floattile=wpnsbuf[iwSwim].tile;
19310
19311 for(int32_t i=0; i<tilesize(tf4Bit); i++) //BSZelda tiles are out of order //does this include swim tiles?
19312 {
19313 tempbyte=buf[23].data[i];
19314 buf[23].data[i]=buf[24].data[i];
19315 buf[24].data[i]=buf[25].data[i];
19316 buf[25].data[i]=buf[26].data[i];
19317 buf[26].data[i]=tempbyte;
19318 }
19319 //swim tiles are out of order, too, but nobody cared? -Z
19320 for(int32_t i=0; i<tilesize(tf4Bit); i++)
19321 {
19322 tempbyte=buf[floattile+11].data[i];
19323 buf[floattile+11].data[i]=buf[floattile+12].data[i];
19324 buf[floattile+12].data[i]=tempbyte;
19325 }
19326 }
19327 }
19328
19329
2/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if((version < 0x211)||((version == 0x211)&&(build<7))) //Goriya tiles are out of order
19330 {
19331 if(!get_bit(quest_rules,qr_NEWENEMYTILES))
19332 {
19333 byte tempbyte;
19334
19335 for(int32_t i=0; i<tilesize(tf4Bit); i++)
19336 {
19337 tempbyte=buf[130].data[i];
19338 buf[130].data[i]=buf[132].data[i];
19339 buf[132].data[i]=tempbyte;
19340
19341 tempbyte=buf[131].data[i];
19342 buf[131].data[i]=buf[133].data[i];
19343 buf[133].data[i]=tempbyte;
19344 }
19345 }
19346 }
19347
19348 93 al_trace("Registering blank tiles\n");
19349 93 register_blank_tiles();
19350 93 }
19351
19352 //memset(temp_tile, 0, tilesize(tf32Bit));
19353
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 delete[] temp_tile;
19354 93 temp_tile=NULL;
19355 93 return 0;
19356 93 }
19357
19358 93 int32_t readtunes(PACKFILE *f, zquestheader *Header, zctune *tunes /*zcmidi_ *midis*/, bool keepdata)
19359 {
19360 93 byte *mf=midi_flags;
19361 int32_t dummy;
19362 word dummy2;
19363 // zcmidi_ temp_midi;
19364 int32_t tunes_to_read;
19365 93 int32_t tune_count=0;
19366 93 word section_version=0;
19367 93 zctune temp;
19368
19369
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(Header->zelda_version < 0x193)
19370 {
19371 // mf=Header->data_flags+ZQ_MIDIS2;
19372 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<178)))
19373 {
19374 tunes_to_read=MAXCUSTOMMIDIS192b177;
19375 }
19376 else
19377 {
19378 tunes_to_read=MAXCUSTOMTUNES;
19379 }
19380 }
19381 else
19382 {
19383 //section version info
19384
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&section_version,f,true))
19385 {
19386 return qe_invalid;
19387 }
19388
19389 93 FFCore.quest_format[vMIDIs] = section_version;
19390
19391 //al_trace("Tunes version %d\n", section_version);
19392
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&dummy2,f,true))
19393 {
19394 return qe_invalid;
19395 }
19396
19397 //section size
19398
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&dummy,f,true))
19399 {
19400 return qe_invalid;
19401 }
19402
19403 //finally... section data
19404
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!pfread(midi_flags,sizeof(midi_flags),f,true))
19405 {
19406 return qe_invalid;
19407 }
19408
19409 93 tunes_to_read=MAXCUSTOMTUNES;
19410 }
19411
19412
2/2
✓ Branch 0 taken 23436 times.
✓ Branch 1 taken 93 times.
23529 for(int32_t i=0; i<MAXCUSTOMTUNES; ++i)
19413 {
19414
2/2
✓ Branch 0 taken 21908 times.
✓ Branch 1 taken 1528 times.
23436 if(get_bit(mf, i))
19415 {
19416 1528 ++tune_count;
19417 1528 }
19418 23436 }
19419
19420
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata==true)
19421 {
19422 93 reset_tunes(tunes); //reset_midis(midis);
19423 93 }
19424
19425
2/2
✓ Branch 0 taken 23436 times.
✓ Branch 1 taken 93 times.
23529 for(int32_t i=0; i<tunes_to_read; i++)
19426 {
19427 23436 temp.clear(); //memset(&temp_midi,0,sizeof(zcmidi_));
19428
19429
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23436 times.
23436 if(keepdata==true)
19430 {
19431 23436 tunes[i].reset(); // reset_midi(midis+i);
19432 23436 }
19433
19434
2/2
✓ Branch 0 taken 21908 times.
✓ Branch 1 taken 1528 times.
23436 if(get_bit(mf,i))
19435 {
19436
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1528 times.
1528 if(section_version < 4)
19437 {
19438 if(!pfread(&temp.title,sizeof(char)*20,f,true))
19439 {
19440 return qe_invalid;
19441 }
19442 }
19443 else
19444 {
19445
1/2
✓ Branch 0 taken 1528 times.
✗ Branch 1 not taken.
1528 if(!pfread(&temp.title,sizeof(temp.title),f,true))
19446 {
19447 return qe_invalid;
19448 }
19449 }
19450
19451
1/2
✓ Branch 0 taken 1528 times.
✗ Branch 1 not taken.
1528 if(!p_igetl(&temp.start,f,true))
19452 {
19453 return qe_invalid;
19454 }
19455
19456
1/2
✓ Branch 0 taken 1528 times.
✗ Branch 1 not taken.
1528 if(!p_igetl(&temp.loop_start,f,true))
19457 {
19458 return qe_invalid;
19459 }
19460
19461
1/2
✓ Branch 0 taken 1528 times.
✗ Branch 1 not taken.
1528 if(!p_igetl(&temp.loop_end,f,true))
19462 {
19463 return qe_invalid;
19464 }
19465
19466
1/2
✓ Branch 0 taken 1528 times.
✗ Branch 1 not taken.
1528 if(!p_igetw(&temp.loop,f,true))
19467 {
19468 return qe_invalid;
19469 }
19470
19471
1/2
✓ Branch 0 taken 1528 times.
✗ Branch 1 not taken.
1528 if(!p_igetw(&temp.volume,f,true))
19472 {
19473 return qe_invalid;
19474 }
19475
19476
1/2
✓ Branch 0 taken 1528 times.
✗ Branch 1 not taken.
1528 if(Header->zelda_version < 0x193)
19477 {
19478 if(!p_igetl(&dummy,f,true))
19479 {
19480 return qe_invalid;
19481 }
19482 }
19483
19484
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1528 times.
1528 if(section_version >= 3)
19485 {
19486
1/2
✓ Branch 0 taken 1528 times.
✗ Branch 1 not taken.
1528 if(!pfread(&temp.flags,sizeof(temp.flags),f,true))
19487 {
19488 return qe_invalid;
19489 }
19490 1528 }
19491
19492
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1528 times.
1528 if(keepdata==true)
19493 {
19494 1528 tunes[i].copyfrom(temp); // memcpy(&midis[i], &temp_midi, sizeof(zcmidi_));
19495 1528 }
19496
19497
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1528 times.
1528 if(section_version < 2) //= 1 || (Header->zelda_version < 0x211) || (Header->zelda_version == 0x211 && Header->build < 18))
19498 {
19499 // old format - a midi is a midi
19500 if(((keepdata==true?tunes[i].data:temp.data)=read_midi(f, true))==NULL)
19501 {
19502 return qe_invalid;
19503 }
19504
19505 //yes you can do this. Isn't the ? operator awesome? :)
19506 (keepdata ? tunes[i] : temp).format = MFORMAT_MIDI;
19507 }
19508 else
19509 {
19510 // 'midi' could be midi or nes, gb, ... music
19511
2/4
✓ Branch 0 taken 1528 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1528 times.
✗ Branch 3 not taken.
1528 if(!pfread(&(keepdata ? tunes[i] : temp).format,sizeof((keepdata ? tunes[i] : temp).format),f,true))
19512 {
19513 return qe_invalid;
19514 }
19515
19516
1/2
✓ Branch 0 taken 1528 times.
✗ Branch 1 not taken.
1528 zctune *ptr = (keepdata==true)?&(tunes[i]):&temp;
19517
19518
1/2
✓ Branch 0 taken 1528 times.
✗ Branch 1 not taken.
1528 switch(temp.format)
19519 {
19520 case MFORMAT_MIDI:
19521
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1528 times.
1528 if((ptr->data=read_midi(f, true))==NULL)
19522 {
19523 return qe_invalid;
19524 }
19525
19526 1528 break;
19527
19528 default:
19529 return qe_invalid;
19530 break;
19531 }
19532 }
19533 1528 }
19534 23436 }
19535
19536 93 return 0;
19537 93 }
19538
19539 93 int32_t readcheatcodes(PACKFILE *f, zquestheader *Header, bool keepdata)
19540 {
19541 int32_t dummy;
19542 ZCHEATS tempzcheats;
19543 93 char temp_use_cheats=1;
19544 93 memset(&tempzcheats, 0, sizeof(tempzcheats));
19545 93 word s_version = 0;
19546
19547
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(Header->zelda_version > 0x192)
19548 {
19549 //section version info
19550
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_version,f,true))
19551 {
19552 return qe_invalid;
19553 }
19554
19555 93 FFCore.quest_format[vCheats] = s_version;
19556 //al_trace("Cheats version %d\n", dummy);
19557
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&dummy,f,true))
19558 {
19559 return qe_invalid;
19560 }
19561
19562 //section size
19563
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&dummy,f,true))
19564 {
19565 return qe_invalid;
19566 }
19567
19568 //finally... section data
19569
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(!p_getc(&temp_use_cheats,f,true))
19570 {
19571 return qe_invalid;
19572 }
19573 93 }
19574
19575
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(Header->data_flags[ZQ_CHEATS2])
19576 {
19577
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&tempzcheats.flags,f,true))
19578 {
19579 return qe_invalid;
19580 }
19581
19582
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!pfread(&tempzcheats.codes, sizeof(tempzcheats.codes), f,true))
19583 {
19584 return qe_invalid;
19585 }
19586 93 }
19587
19588
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata==true)
19589 {
19590 93 memcpy(&zcheats, &tempzcheats, sizeof(tempzcheats));
19591 93 Header->data_flags[ZQ_CHEATS2]=temp_use_cheats;
19592 93 }
19593
19594 93 return 0;
19595 93 }
19596
19597 239 int32_t readinitdata(PACKFILE *f, zquestheader *Header, bool keepdata)
19598 {
19599 int32_t dummy;
19600 239 word s_version=0, s_cversion=0;
19601 byte padding;
19602 word tempw;
19603
19604 239 zinitdata temp_zinit;
19605
19606 // Legacy item properties (now integrated into itemdata)
19607 byte sword_hearts[4];
19608 byte beam_hearts[4];
19609 239 byte beam_percent=0;
19610 word beam_power[4];
19611 239 byte hookshot_length=99;
19612 239 byte hookshot_links=100;
19613 239 byte longshot_length=99;
19614 239 byte longshot_links=100;
19615 239 byte moving_fairy_hearts=3;
19616 239 byte moving_fairy_heart_percent=0;
19617 239 byte stationary_fairy_hearts=3;
19618 239 byte stationary_fairy_heart_percent=0;
19619 239 byte moving_fairy_magic=0;
19620 239 byte moving_fairy_magic_percent=0;
19621 239 byte stationary_fairy_magic=0;
19622 239 byte stationary_fairy_magic_percent=0;
19623 239 byte blue_potion_hearts=100;
19624 239 byte blue_potion_heart_percent=1;
19625 239 byte red_potion_hearts=100;
19626 239 byte red_potion_heart_percent=1;
19627 239 byte blue_potion_magic=100;
19628 239 byte blue_potion_magic_percent=1;
19629 239 byte red_potion_magic=100;
19630 239 byte red_potion_magic_percent=1;
19631
19632
2/2
✓ Branch 0 taken 93 times.
✓ Branch 1 taken 146 times.
239 temp_zinit.subscreen_style=get_bit(quest_rules,qr_COOLSCROLL)?1:0;
19633
19634
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(Header->zelda_version > 0x192)
19635 {
19636 //section version info
19637
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&s_version,f,true))
19638 {
19639 return qe_invalid;
19640 }
19641
19642 93 FFCore.quest_format[vInitData] = s_version;
19643
19644 //al_trace("Init data version %d\n", s_version);
19645
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&s_cversion,f,true))
19646 {
19647 return qe_invalid;
19648 }
19649
19650 //section size
19651
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetl(&dummy,f,true))
19652 {
19653 return qe_invalid;
19654 }
19655 93 }
19656
19657 /* HIGHLY UNORTHODOX UPDATING THING, by L
19658 * This fixes quests made before revision 277 (such as the 'Lost Isle Build'),
19659 * where the speed of Pols Voice changed. It also coincided with V_INITDATA
19660 * changing from 13 to 14.
19661 */
19662
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(keepdata && s_version < 14)
19663 fixpolsvoice=true;
19664
19665 /* End highly unorthodox updating thing */
19666
19667
4/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 72 times.
✓ Branch 5 taken 21 times.
93 if(s_version >= 15 && get_bit(deprecated_rules, 27)) // The int16_t-lived rule, qr_JUMPHEROLAYER3
19668 21 temp_zinit.jump_hero_layer_threshold=0;
19669
19670
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(s_version >= 10)
19671 {
19672 char temp;
19673
19674 //new-style items
19675
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t j=0; j<256; j++)
19676 {
19677
2/4
✓ Branch 0 taken 23808 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 23808 times.
23808 if(!p_getc(&temp,f,true))
19678 return qe_invalid;
19679
19680 23808 temp_zinit.items[j] = (temp != 0);
19681 23808 }
19682 93 }
19683
19684
3/6
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 53 times.
✓ Branch 5 taken 53 times.
93 if((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>26)))
19685 {
19686 char temp;
19687
19688 //finally... section data
19689
3/4
✗ Branch 0 not taken.
✓ Branch 1 taken 40 times.
✓ Branch 2 taken 53 times.
✓ Branch 3 taken 53 times.
146 if((Header->zelda_version > 0x192)||
19690 //new only
19691 ((Header->zelda_version == 0x192)&&(Header->build>173)))
19692 {
19693 //OLD-style items... sigh
19694
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(s_version < 10)
19695 {
19696 if(!p_getc(&temp,f,true))
19697 {
19698 return qe_invalid;
19699 }
19700
19701 temp_zinit.items[iRaft]=(temp != 0);
19702
19703 if(!p_getc(&temp,f,true))
19704 {
19705 return qe_invalid;
19706 }
19707
19708 temp_zinit.items[iLadder]=(temp != 0);
19709
19710 if(!p_getc(&temp,f,true))
19711 {
19712 return qe_invalid;
19713 }
19714
19715 temp_zinit.items[iBook]=(temp != 0);
19716
19717 if(!p_getc(&temp,f,true))
19718 {
19719 return qe_invalid;
19720 }
19721
19722 temp_zinit.items[iMKey]=(temp!=0);
19723
19724 if(!p_getc(&temp,f,true))
19725 {
19726 return qe_invalid;
19727 }
19728
19729 temp_zinit.items[iFlippers]=(temp != 0);
19730
19731 if(!p_getc(&temp,f,true))
19732 {
19733 return qe_invalid;
19734 }
19735
19736 temp_zinit.items[iBoots]=(temp!=0);
19737 }
19738 93 }
19739
19740
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 146 times.
146 if(s_version < 10)
19741 {
19742 char tempring, tempsword, tempshield, tempwallet, tempbracelet, tempamulet, tempbow;
19743
19744 if(!p_getc(&tempring,f,true))
19745 {
19746 return qe_invalid;
19747 }
19748
19749 if(!p_getc(&tempsword,f,true))
19750 {
19751 return qe_invalid;
19752 }
19753
19754 if(!p_getc(&tempshield,f,true))
19755 {
19756 return qe_invalid;
19757 }
19758
19759 if(!p_getc(&tempwallet,f,true))
19760 {
19761 return qe_invalid;
19762 }
19763
19764 if(!p_getc(&tempbracelet,f,true))
19765 {
19766 return qe_invalid;
19767 }
19768
19769 if(!p_getc(&tempamulet,f,true))
19770 {
19771 return qe_invalid;
19772 }
19773
19774 if(!p_getc(&tempbow,f,true))
19775 {
19776 return qe_invalid;
19777 }
19778
19779 //old only
19780 if((Header->zelda_version == 0x192)&&(Header->build<174))
19781 {
19782 tempring=(tempring)?(1<<(tempring-1)):0;
19783 tempsword=(tempsword)?(1<<(tempsword-1)):0;
19784 tempshield=(tempshield)?(1<<(tempshield-1)):0;
19785 tempwallet=(tempwallet)?(1<<(tempwallet-1)):0;
19786 tempbracelet=(tempbracelet)?(1<<(tempbracelet-1)):0;
19787 tempamulet=(tempamulet)?(1<<(tempamulet-1)):0;
19788 tempbow=(tempbow)?(1<<(tempbow-1)):0;
19789 }
19790
19791 //rings start at level 2... wtf
19792 //account for this -DD
19793 tempring <<= 1;
19794 addOldStyleFamily(&temp_zinit, itemsbuf, itype_ring, tempring);
19795 addOldStyleFamily(&temp_zinit, itemsbuf, itype_sword, tempsword);
19796 addOldStyleFamily(&temp_zinit, itemsbuf, itype_shield, tempshield);
19797 addOldStyleFamily(&temp_zinit, itemsbuf, itype_wallet, tempwallet);
19798 //bracelet ALSO starts at level 2 :-( -DD
19799 tempbracelet<<=1;
19800 addOldStyleFamily(&temp_zinit, itemsbuf, itype_bracelet, tempbracelet);
19801 addOldStyleFamily(&temp_zinit, itemsbuf, itype_amulet, tempamulet);
19802 addOldStyleFamily(&temp_zinit, itemsbuf, itype_bow, tempbow);
19803
19804 //new only
19805 if((Header->zelda_version == 0x192)&&(Header->build>173))
19806 {
19807 for(int32_t q=0; q<32; q++)
19808 {
19809 if(!p_getc(&padding,f,true))
19810 {
19811 return qe_invalid;
19812 }
19813 }
19814 }
19815
19816 char tempcandle, tempboomerang, temparrow, tempwhistle;
19817
19818 if(!p_getc(&tempcandle,f,true))
19819 {
19820 return qe_invalid;
19821 }
19822
19823 if(!p_getc(&tempboomerang,f,true))
19824 {
19825 return qe_invalid;
19826 }
19827
19828 if(!p_getc(&temparrow,f,true))
19829 {
19830 return qe_invalid;
19831 }
19832
19833 if(!p_getc(&temp,f,true))
19834 {
19835 return qe_invalid;
19836 }
19837
19838 addOldStyleFamily(&temp_zinit, itemsbuf, itype_potion, temp);
19839
19840 if(!p_getc(&tempwhistle,f,true))
19841 {
19842 return qe_invalid;
19843 }
19844
19845 //old only
19846 if((Header->zelda_version == 0x192)&&(Header->build<174))
19847 {
19848 tempcandle=(tempcandle)?(1<<(tempcandle-1)):0;
19849 tempboomerang=(tempboomerang)?(1<<(tempboomerang-1)):0;
19850 temparrow=(temparrow)?(1<<(temparrow-1)):0;
19851 tempwhistle=(tempwhistle)?(1<<(tempwhistle-1)):0;
19852 }
19853
19854 addOldStyleFamily(&temp_zinit, itemsbuf, itype_candle, tempcandle);
19855 addOldStyleFamily(&temp_zinit, itemsbuf, itype_brang, tempboomerang);
19856 addOldStyleFamily(&temp_zinit, itemsbuf, itype_arrow, temparrow);
19857 addOldStyleFamily(&temp_zinit, itemsbuf, itype_whistle, tempwhistle);
19858 //What about the potion...?
19859
19860 }
19861
19862
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 73 times.
146 if(s_version < 29)
19863 {
19864 //Oh sure, stick these IN THE MIDDLE OF THE ITEMS, just to make me want
19865 //to jab out my eye...
19866
2/4
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 73 times.
✗ Branch 3 not taken.
73 if(!p_getc(&padding,f,true))
19867 return qe_invalid;
19868 73 temp_zinit.bombs = padding;
19869
19870
2/4
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 73 times.
✗ Branch 3 not taken.
73 if(!p_getc(&padding,f,true))
19871 return qe_invalid;
19872 73 temp_zinit.super_bombs = padding;
19873 73 }
19874
19875 //Back to more OLD item code
19876
0/2
✗ Branch 0 not taken.
✗ Branch 1 not taken.
146 if(s_version < 10)
19877 {
19878 if((Header->zelda_version > 0x192)||
19879 //new only
19880 ((Header->zelda_version == 0x192)&&(Header->build>173)))
19881 {
19882 if(!p_getc(&temp,f,true))
19883 {
19884 return qe_invalid;
19885 }
19886
19887 addOldStyleFamily(&temp_zinit, itemsbuf, itype_wand, temp);
19888
19889 if(!p_getc(&temp,f,true))
19890 {
19891 return qe_invalid;
19892 }
19893
19894 addOldStyleFamily(&temp_zinit, itemsbuf, itype_letter, temp);
19895
19896 if(!p_getc(&temp,f,true))
19897 {
19898 return qe_invalid;
19899 }
19900
19901 addOldStyleFamily(&temp_zinit, itemsbuf, itype_lens, temp);
19902
19903 if(!p_getc(&temp,f,true))
19904 {
19905 return qe_invalid;
19906 }
19907
19908 addOldStyleFamily(&temp_zinit, itemsbuf, itype_hookshot, temp);
19909
19910 if(!p_getc(&temp,f,true))
19911 {
19912 return qe_invalid;
19913 }
19914
19915 addOldStyleFamily(&temp_zinit, itemsbuf, itype_bait, temp);
19916
19917 if(!p_getc(&temp,f,true))
19918 {
19919 return qe_invalid;
19920 }
19921
19922 addOldStyleFamily(&temp_zinit, itemsbuf, itype_hammer, temp);
19923
19924 if(!p_getc(&temp,f,true))
19925 {
19926 return qe_invalid;
19927 }
19928
19929 addOldStyleFamily(&temp_zinit, itemsbuf, itype_dinsfire, temp);
19930
19931 if(!p_getc(&temp,f,true))
19932 {
19933 return qe_invalid;
19934 }
19935
19936 addOldStyleFamily(&temp_zinit, itemsbuf, itype_faroreswind, temp);
19937
19938 if(!p_getc(&temp,f,true))
19939 {
19940 return qe_invalid;
19941 }
19942
19943 addOldStyleFamily(&temp_zinit, itemsbuf, itype_nayruslove, temp);
19944
19945 if(!p_getc(&temp,f,true))
19946 {
19947 return qe_invalid;
19948 }
19949
19950 if(Header->zelda_version == 0x192)
19951 {
19952 for(int32_t q=0; q<32; q++)
19953 {
19954 if(!p_getc(&padding,f,true))
19955 {
19956 return qe_invalid;
19957 }
19958 }
19959 }
19960 }
19961 }
19962
19963 //old only
19964 if((Header->zelda_version == 0x192)&&(Header->build<174))
19965 {
19966 byte equipment, items; //bit flags
19967
19968 if(!p_getc(&equipment,f,true))
19969 {
19970 return qe_invalid;
19971 }
19972
19973 temp_zinit.items[iRaft]=(get_bit(&equipment, idE_RAFT)!=0);
19974 temp_zinit.items[iLadder]=(get_bit(&equipment, idE_LADDER)!=0);
19975 temp_zinit.items[iBook]=(get_bit(&equipment, idE_BOOK)!=0);
19976 temp_zinit.items[iMKey]=(get_bit(&equipment, idE_KEY)!=0);
19977 temp_zinit.items[iFlippers]=(get_bit(&equipment, idE_FLIPPERS)!=0);
19978 temp_zinit.items[iBoots]=(get_bit(&equipment, idE_BOOTS)!=0);
19979
19980
19981 if(!p_getc(&items,f,true))
19982 {
19983 return qe_invalid;
19984 }
19985
19986 temp_zinit.items[iWand]=(get_bit(&items, idI_WAND)!=0);
19987 temp_zinit.items[iLetter]=(get_bit(&items, idI_LETTER)!=0);
19988 temp_zinit.items[iLens]=(get_bit(&items, idI_LENS)!=0);
19989 temp_zinit.items[iHookshot]=(get_bit(&items, idI_HOOKSHOT)!=0);
19990 temp_zinit.items[iBait]=(get_bit(&items, idI_BAIT)!=0);
19991 temp_zinit.items[iHammer]=(get_bit(&items, idI_HAMMER)!=0);
19992 }
19993
19994 if(!p_getc(&temp_zinit.hc,f,true))
19995 {
19996 return qe_invalid;
19997 }
19998
19999
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(s_version < 14)
20000 {
20001 byte temphp;
20002
20003 if(!p_getc(&temphp,f,true))
20004 {
20005 return qe_invalid;
20006 }
20007
20008 temp_zinit.start_heart=temphp;
20009
20010 if(!p_getc(&temphp,f,true))
20011 {
20012 return qe_invalid;
20013 }
20014
20015 temp_zinit.cont_heart=temphp;
20016 }
20017 else
20018 {
20019
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&temp_zinit.start_heart,f,true))
20020 {
20021 return qe_invalid;
20022 }
20023
20024
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&temp_zinit.cont_heart,f,true))
20025 {
20026 return qe_invalid;
20027 }
20028 }
20029
20030
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_getc(&temp_zinit.hcp,f,true))
20031 {
20032 return qe_invalid;
20033 }
20034
20035
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version >= 14)
20036 {
20037
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_getc(&temp_zinit.hcp_per_hc,f,true))
20038 {
20039 return qe_invalid;
20040 }
20041
20042
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(s_version<16) // July 2007
20043 {
20044 if(get_bit(quest_rules,qr_BRANGPICKUP+1))
20045 temp_zinit.hcp_per_hc = 0xFF;
20046
20047 //Dispose of legacy rule
20048 set_bit(quest_rules,qr_BRANGPICKUP+1, 0);
20049 }
20050 93 }
20051
20052
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if(s_version < 29)
20053 {
20054
2/4
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 73 times.
✗ Branch 3 not taken.
73 if(!p_getc(&padding,f,true))
20055 return qe_invalid;
20056 73 temp_zinit.max_bombs = padding;
20057 73 }
20058
20059
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_getc(&temp_zinit.keys,f,true))
20060 {
20061 return qe_invalid;
20062 }
20063
20064
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&temp_zinit.rupies,f,true))
20065 {
20066 return qe_invalid;
20067 }
20068
20069
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_getc(&temp_zinit.triforce,f,true))
20070 {
20071 return qe_invalid;
20072 }
20073
20074
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if(s_version>12 || (Header->zelda_version == 0x211 && Header->build == 18))
20075 {
20076
2/2
✓ Branch 0 taken 5952 times.
✓ Branch 1 taken 93 times.
6045 for(int32_t i=0; i<64; i++)
20077 {
20078
2/4
✓ Branch 0 taken 5952 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 5952 times.
5952 if(!p_getc(&temp_zinit.map[i],f,true))
20079 {
20080 return qe_invalid;
20081 }
20082 5952 }
20083
20084
2/2
✓ Branch 0 taken 5952 times.
✓ Branch 1 taken 93 times.
6045 for(int32_t i=0; i<64; i++)
20085 {
20086
2/4
✓ Branch 0 taken 5952 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 5952 times.
5952 if(!p_getc(&temp_zinit.compass[i],f,true))
20087 {
20088 return qe_invalid;
20089 }
20090 5952 }
20091 93 }
20092 else
20093 {
20094 for(int32_t i=0; i<32; i++)
20095 {
20096 if(!p_getc(&temp_zinit.map[i],f,true))
20097 {
20098 return qe_invalid;
20099 }
20100 }
20101
20102 for(int32_t i=0; i<32; i++)
20103 {
20104 if(!p_getc(&temp_zinit.compass[i],f,true))
20105 {
20106 return qe_invalid;
20107 }
20108 }
20109 }
20110
20111
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
93 if((Header->zelda_version > 0x192)||
20112 //new only
20113 ((Header->zelda_version == 0x192)&&(Header->build>173)))
20114 {
20115
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if(s_version>12 || (Header->zelda_version == 0x211 && Header->build == 18))
20116 {
20117
2/2
✓ Branch 0 taken 5952 times.
✓ Branch 1 taken 93 times.
6045 for(int32_t i=0; i<64; i++)
20118 {
20119
2/4
✓ Branch 0 taken 5952 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 5952 times.
5952 if(!p_getc(&temp_zinit.boss_key[i],f,true))
20120 {
20121 return qe_invalid;
20122 }
20123 5952 }
20124 93 }
20125 else
20126 {
20127 for(int32_t i=0; i<32; i++)
20128 {
20129 if(!p_getc(&temp_zinit.boss_key[i],f,true))
20130 {
20131 return qe_invalid;
20132 }
20133 }
20134 }
20135 93 }
20136
20137
2/2
✓ Branch 0 taken 93 times.
✓ Branch 1 taken 1488 times.
1581 for(int32_t i=0; i<16; i++)
20138 {
20139
2/4
✓ Branch 0 taken 1488 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1488 times.
1488 if(!p_getc(&temp_zinit.misc[i],f,true))
20140 {
20141 return qe_invalid;
20142 }
20143 1488 }
20144
20145
1/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
93 if(s_version < 15) for(int32_t i=0; i<4; i++)
20146 {
20147 if(!p_getc(&sword_hearts[i],f,true))
20148 {
20149 return qe_invalid;
20150 }
20151 }
20152
20153
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_getc(&temp_zinit.last_map,f,true))
20154 {
20155 return qe_invalid;
20156 }
20157
20158
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_getc(&temp_zinit.last_screen,f,true))
20159 {
20160 return qe_invalid;
20161 }
20162
20163
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(s_version < 14)
20164 {
20165 byte tempmp;
20166
20167 if(!p_getc(&tempmp,f,true))
20168 {
20169 return qe_invalid;
20170 }
20171
20172 temp_zinit.max_magic=tempmp;
20173
20174 if(!p_getc(&tempmp,f,true))
20175 {
20176 return qe_invalid;
20177 }
20178
20179 temp_zinit.magic=tempmp;
20180 }
20181 else
20182 {
20183
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&temp_zinit.max_magic,f,true))
20184 {
20185 return qe_invalid;
20186 }
20187
20188
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&temp_zinit.magic,f,true))
20189 {
20190 return qe_invalid;
20191 }
20192 }
20193
20194
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version < 15)
20195 {
20196 if(s_version < 12)
20197 {
20198 temp_zinit.max_magic*=32;
20199 temp_zinit.magic*=32;
20200 }
20201
20202 for(int32_t i=0; i<4; i++)
20203 {
20204 if(!p_getc(&beam_hearts[i],f,true))
20205 {
20206 return qe_invalid;
20207 }
20208 }
20209
20210 if(!p_getc(&beam_percent,f,true))
20211 {
20212 return qe_invalid;
20213 }
20214 }
20215 else
20216 {
20217
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_getc(&temp_zinit.bomb_ratio,f,true))
20218 {
20219 return qe_invalid;
20220 }
20221 }
20222
20223
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version < 15)
20224 {
20225 byte tempbp;
20226
20227 for(int32_t i=0; i<4; i++)
20228 {
20229 if(!(s_version < 14 ? p_getc(&tempbp,f,true) : p_igetw(&tempbp,f,true)))
20230 {
20231 return qe_invalid;
20232 }
20233
20234 beam_power[i]=tempbp;
20235 }
20236
20237 if(!p_getc(&hookshot_links,f,true))
20238 {
20239 return qe_invalid;
20240 }
20241
20242 if(s_version>6)
20243 {
20244 if(!p_getc(&hookshot_length,f,true))
20245 {
20246 return qe_invalid;
20247 }
20248
20249 if(!p_getc(&longshot_links,f,true))
20250 {
20251 return qe_invalid;
20252 }
20253
20254 if(!p_getc(&longshot_length,f,true))
20255 {
20256 return qe_invalid;
20257 }
20258 }
20259 }
20260
20261
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_getc(&temp_zinit.msg_more_x,f,true))
20262 {
20263 return qe_invalid;
20264 }
20265
20266
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_getc(&temp_zinit.msg_more_y,f,true))
20267 {
20268 return qe_invalid;
20269 }
20270
20271
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_getc(&temp_zinit.subscreen,f,true))
20272 {
20273 return qe_invalid;
20274 }
20275
20276 //old only
20277
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
93 if((Header->zelda_version == 0x192)&&(Header->build<174))
20278 {
20279 for(int32_t i=0; i<32; i++)
20280 {
20281 if(!p_getc(&temp_zinit.boss_key[i],f,true))
20282 {
20283 return qe_invalid;
20284 }
20285 }
20286 }
20287
20288
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>173))) //new only
20289 {
20290
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(s_version <= 10)
20291 {
20292 byte tempbyte;
20293
20294 if(!p_getc(&tempbyte,f,true))
20295 {
20296 return qe_invalid;
20297 }
20298
20299 temp_zinit.start_dmap = (word)tempbyte;
20300 }
20301 else
20302 {
20303
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&temp_zinit.start_dmap,f,true))
20304 {
20305 return qe_invalid;
20306 }
20307 }
20308
20309
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_getc(&temp_zinit.heroAnimationStyle,f,true))
20310 {
20311 return qe_invalid;
20312 }
20313 93 }
20314
20315
3/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 73 times.
✓ Branch 3 taken 20 times.
93 if(s_version>1 && s_version < 29)
20316 {
20317
2/4
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 73 times.
✗ Branch 3 not taken.
73 if(!p_getc(&padding,f,true))
20318 return qe_invalid;
20319 73 temp_zinit.arrows = padding;
20320
20321
2/4
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 73 times.
✗ Branch 3 not taken.
73 if(!p_getc(&padding,f,true))
20322 return qe_invalid;
20323 73 temp_zinit.max_arrows = padding;
20324 73 }
20325
20326
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(s_version>2)
20327 {
20328
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(s_version <= 10)
20329 {
20330 for(int32_t i=0; i<OLDMAXLEVELS; i++)
20331 {
20332 if(!p_getc(&(temp_zinit.level_keys[i]),f,true))
20333 {
20334 return qe_invalid;
20335 }
20336 }
20337 }
20338 else
20339 {
20340
2/2
✓ Branch 0 taken 47616 times.
✓ Branch 1 taken 93 times.
47709 for(int32_t i=0; i<MAXLEVELS; i++)
20341 {
20342
2/4
✓ Branch 0 taken 47616 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 47616 times.
✗ Branch 3 not taken.
47616 if(!p_getc(&(temp_zinit.level_keys[i]),f,true))
20343 {
20344 return qe_invalid;
20345 }
20346 47616 }
20347 }
20348 93 }
20349
20350
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version>3)
20351 {
20352
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&temp_zinit.ss_grid_x,f,true))
20353 {
20354 return qe_invalid;
20355 }
20356
20357
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&temp_zinit.ss_grid_y,f,true))
20358 {
20359 return qe_invalid;
20360 }
20361
20362
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&temp_zinit.ss_grid_xofs,f,true))
20363 {
20364 return qe_invalid;
20365 }
20366
20367
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&temp_zinit.ss_grid_yofs,f,true))
20368 {
20369 return qe_invalid;
20370 }
20371
20372
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&temp_zinit.ss_grid_color,f,true))
20373 {
20374 return qe_invalid;
20375 }
20376
20377
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&temp_zinit.ss_bbox_1_color,f,true))
20378 {
20379 return qe_invalid;
20380 }
20381
20382
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&temp_zinit.ss_bbox_2_color,f,true))
20383 {
20384 return qe_invalid;
20385 }
20386
20387
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&temp_zinit.ss_flags,f,true))
20388 {
20389 return qe_invalid;
20390 }
20391
20392
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 temp_zinit.ss_grid_x=zc_max(temp_zinit.ss_grid_x,1);
20393
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 temp_zinit.ss_grid_y=zc_max(temp_zinit.ss_grid_y,1);
20394 93 }
20395
20396
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if(s_version>4 && s_version<15)
20397 {
20398 if(!p_getc(&moving_fairy_hearts,f,true))
20399 {
20400 return qe_invalid;
20401 }
20402
20403 if(!p_getc(&moving_fairy_heart_percent,f,true))
20404 {
20405 return qe_invalid;
20406 }
20407 }
20408
20409
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if(s_version>5 && s_version < 10)
20410 {
20411 if(!p_getc(&temp,f,true))
20412 {
20413 return qe_invalid;
20414 }
20415
20416 addOldStyleFamily(&temp_zinit, itemsbuf, itype_quiver, temp);
20417 }
20418
20419
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if(s_version>6 && s_version<15)
20420 {
20421 if(!p_getc(&stationary_fairy_hearts,f,true))
20422 {
20423 return qe_invalid;
20424 }
20425
20426 if(!p_getc(&stationary_fairy_heart_percent,f,true))
20427 {
20428 return qe_invalid;
20429 }
20430
20431 if(!p_getc(&moving_fairy_magic,f,true))
20432 {
20433 return qe_invalid;
20434 }
20435
20436 if(!p_getc(&moving_fairy_magic_percent,f,true))
20437 {
20438 return qe_invalid;
20439 }
20440
20441 if(!p_getc(&stationary_fairy_magic,f,true))
20442 {
20443 return qe_invalid;
20444 }
20445
20446 if(!p_getc(&stationary_fairy_magic_percent,f,true))
20447 {
20448 return qe_invalid;
20449 }
20450
20451 if(!p_getc(&blue_potion_hearts,f,true))
20452 {
20453 return qe_invalid;
20454 }
20455
20456 if(!p_getc(&blue_potion_heart_percent,f,true))
20457 {
20458 return qe_invalid;
20459 }
20460
20461 if(!p_getc(&red_potion_hearts,f,true))
20462 {
20463 return qe_invalid;
20464 }
20465
20466 if(!p_getc(&red_potion_heart_percent,f,true))
20467 {
20468 return qe_invalid;
20469 }
20470
20471 if(!p_getc(&blue_potion_magic,f,true))
20472 {
20473 return qe_invalid;
20474 }
20475
20476 if(!p_getc(&blue_potion_magic_percent,f,true))
20477 {
20478 return qe_invalid;
20479 }
20480
20481 if(!p_getc(&red_potion_magic,f,true))
20482 {
20483 return qe_invalid;
20484 }
20485
20486 if(!p_getc(&red_potion_magic_percent,f,true))
20487 {
20488 return qe_invalid;
20489 }
20490 }
20491
20492
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version>6)
20493 {
20494
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_getc(&temp_zinit.subscreen_style,f,true))
20495 {
20496 return qe_invalid;
20497 }
20498 93 }
20499
20500
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version>7)
20501 {
20502
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_getc(&temp_zinit.usecustomsfx,f,true))
20503 {
20504 return qe_invalid;
20505 }
20506 93 }
20507
20508
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version>8)
20509 {
20510
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&temp_zinit.max_rupees,f,true))
20511 {
20512 return qe_invalid;
20513 }
20514
20515
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&temp_zinit.max_keys,f,true))
20516 {
20517 return qe_invalid;
20518 }
20519 93 }
20520
20521
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version>16)
20522 {
20523
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_getc(&temp_zinit.gravity,f,true))
20524 {
20525 return qe_invalid;
20526 }
20527
20528
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_igetw(&temp_zinit.terminalv,f,true))
20529 {
20530 return qe_invalid;
20531 }
20532
20533
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_getc(&temp_zinit.msg_speed,f,true))
20534 {
20535 return qe_invalid;
20536 }
20537
20538
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_getc(&temp_zinit.transition_type,f,true))
20539 {
20540 return qe_invalid;
20541 }
20542
20543
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_getc(&temp_zinit.jump_hero_layer_threshold,f,true))
20544 {
20545 return qe_invalid;
20546 }
20547 93 }
20548
20549
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version>17)
20550 {
20551
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(!p_getc(&temp_zinit.msg_more_is_offset,f,true))
20552 {
20553 return qe_invalid;
20554 }
20555 93 }
20556
20557 //expaned init data for larger values in 2.55
20558
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if ( s_version >= 19 ) //expand init data bombs, sbombs, and arrows to 0xFFFF
20559 {
20560
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_igetw(&temp_zinit.bombs,f,true))
20561 {
20562 return qe_invalid;
20563 }
20564
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_igetw(&temp_zinit.super_bombs,f,true))
20565 {
20566 return qe_invalid;
20567 }
20568
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_igetw(&temp_zinit.max_bombs,f,true))
20569 {
20570 return qe_invalid;
20571 }
20572
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_igetw(&temp_zinit.max_sbombs,f,true))
20573 {
20574 return qe_invalid;
20575 }
20576
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_igetw(&temp_zinit.arrows,f,true))
20577 {
20578 return qe_invalid;
20579 }
20580
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_igetw(&temp_zinit.max_arrows,f,true))
20581 {
20582 return qe_invalid;
20583 }
20584
20585 20 }
20586
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if ( s_version >= 20 )
20587 {
20588
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_igetw(&temp_zinit.heroStep,f,true))
20589 {
20590 return qe_invalid;
20591 }
20592 20 }
20593 else
20594 {
20595 73 temp_zinit.heroStep = 150; //1.5 pixels per frame
20596 }
20597
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if ( s_version >= 21 )
20598 {
20599
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_igetw(&temp_zinit.subscrSpeed,f,true))
20600 {
20601 return qe_invalid;
20602 }
20603 20 }
20604 else
20605 {
20606 73 temp_zinit.subscrSpeed = 1; //3 pixels per frame
20607 }
20608 //old only
20609
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
93 if((Header->zelda_version == 0x192)&&(Header->build<174))
20610 {
20611 byte items2;
20612
20613 if(!p_getc(&items2,f,true))
20614 {
20615 return qe_invalid;
20616 }
20617
20618 temp_zinit.items[iDinsFire]=(get_bit(&items2, idI_DFIRE)!=0);
20619 temp_zinit.items[iFaroresWind]=(get_bit(&items2, idI_FWIND)!=0);
20620 temp_zinit.items[iNayrusLove]=(get_bit(&items2, idI_NLOVE)!=0);
20621 }
20622
20623
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(Header->zelda_version < 0x193)
20624 {
20625 for(int32_t q=0; q<96; q++)
20626 {
20627 if(!p_getc(&padding,f,true))
20628 {
20629 return qe_invalid;
20630 }
20631 }
20632
20633 //new only
20634 if((Header->zelda_version == 0x192)&&(Header->build>173))
20635 {
20636 if(!p_getc(&padding,f,true))
20637 {
20638 return qe_invalid;
20639 }
20640
20641 if(!p_getc(&padding,f,true))
20642 {
20643 return qe_invalid;
20644 }
20645 }
20646 }
20647 93 }
20648
20649
3/6
✓ Branch 0 taken 93 times.
✓ Branch 1 taken 53 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
146 if((Header->zelda_version < 0x211)||((Header->zelda_version == 0x211)&&(Header->build<15)))
20650 {
20651 //temp_zinit.shield=i_smallshield;
20652
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 53 times.
53 int32_t sshieldid = getItemID(itemsbuf, itype_shield, i_smallshield);
20653
20654 if(sshieldid != -1)
20655 temp_zinit.items[sshieldid] = true;
20656 }
20657
20658
2/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<27)))
20659 {
20660 temp_zinit.hc=3;
20661 temp_zinit.start_heart=3;
20662 temp_zinit.cont_heart=3;
20663 temp_zinit.max_bombs=8;
20664 }
20665
20666
2/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<50)))
20667 {
20668 sword_hearts[0]=0;
20669 sword_hearts[1]=5;
20670 sword_hearts[2]=12;
20671 sword_hearts[3]=21;
20672 }
20673
20674
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<51)))
20675 {
20676 temp_zinit.last_map=0;
20677 temp_zinit.last_screen=0;
20678 }
20679
20680
2/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<68)))
20681 {
20682 temp_zinit.max_magic=0;
20683 temp_zinit.magic=0;
20684 set_bit(temp_zinit.misc,idM_DOUBLEMAGIC,0);
20685 }
20686
20687
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<129)))
20688 {
20689
20690 for(int32_t x=0; x<4; x++)
20691 {
20692 beam_hearts[x]=100;
20693 }
20694
20695 for(int32_t i=0; i<idBP_MAX; i++)
20696 {
20697 set_bit(&beam_percent,i,!get_bit(quest_rules,qr_LENSHINTS+i));
20698 set_bit(quest_rules,qr_LENSHINTS+i,0);
20699 }
20700
20701 for(int32_t x=0; x<4; x++)
20702 {
20703 beam_power[x]=get_bit(quest_rules,qr_HIDECARRIEDITEMS)?50:100;
20704 }
20705
20706 set_bit(quest_rules,qr_HIDECARRIEDITEMS,0);
20707 hookshot_links=100;
20708 temp_zinit.msg_more_x=224;
20709 temp_zinit.msg_more_y=64;
20710 }
20711
20712 // Okay, let's put these legacy values into itemsbuf.
20713
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(s_version < 15)
20714 for(int32_t i=0; i<MAXITEMS; i++)
20715 {
20716 switch(i)
20717 {
20718 case iFairyStill:
20719 itemsbuf[i].misc1 = stationary_fairy_hearts;
20720 itemsbuf[i].misc2 = stationary_fairy_magic;
20721 itemsbuf[i].misc3 = 0;
20722 itemsbuf[i].flags |= stationary_fairy_heart_percent ? ITEM_FLAG1 : 0;
20723 itemsbuf[i].flags |= stationary_fairy_magic_percent ? ITEM_FLAG2 : 0;
20724 break;
20725
20726 case iFairyMoving:
20727 itemsbuf[i].misc1 = moving_fairy_hearts;
20728 itemsbuf[i].misc2 = moving_fairy_magic;
20729 itemsbuf[i].misc3 = 50;
20730 itemsbuf[i].flags |= moving_fairy_heart_percent ? ITEM_FLAG1 : 0;
20731 itemsbuf[i].flags |= moving_fairy_magic_percent ? ITEM_FLAG2 : 0;
20732 break;
20733
20734 case iRPotion:
20735 itemsbuf[i].misc1 = red_potion_hearts;
20736 itemsbuf[i].misc2 = red_potion_magic;
20737 itemsbuf[i].flags |= red_potion_heart_percent ? ITEM_FLAG1 : 0;
20738 itemsbuf[i].flags |= red_potion_magic_percent ? ITEM_FLAG2 : 0;
20739 break;
20740
20741 case iBPotion:
20742 itemsbuf[i].misc1 = blue_potion_hearts;
20743 itemsbuf[i].misc2 = blue_potion_magic;
20744 itemsbuf[i].flags |= blue_potion_heart_percent ? ITEM_FLAG1 : 0;
20745 itemsbuf[i].flags |= blue_potion_magic_percent ? ITEM_FLAG2 : 0;
20746 break;
20747
20748 case iSword:
20749 itemsbuf[i].pickup_hearts = sword_hearts[0];
20750 itemsbuf[i].misc1 = beam_hearts[0];
20751 itemsbuf[i].misc2 = beam_power[0];
20752 // It seems that ITEM_FLAG1 was already added by reset_itembuf()...
20753 itemsbuf[i].flags &= (!get_bit(&beam_percent,0)) ? ~ITEM_FLAG1 : ~0;
20754 break;
20755
20756 case iWSword:
20757 itemsbuf[i].pickup_hearts = sword_hearts[1];
20758 itemsbuf[i].misc1 = beam_hearts[1];
20759 itemsbuf[i].misc2 = beam_power[1];
20760 itemsbuf[i].flags &= (!get_bit(&beam_percent,1)) ? ~ITEM_FLAG1 : ~0;
20761 break;
20762
20763 case iMSword:
20764 itemsbuf[i].pickup_hearts = sword_hearts[2];
20765 itemsbuf[i].misc1 = beam_hearts[2];
20766 itemsbuf[i].misc2 = beam_power[2];
20767 itemsbuf[i].flags &= (!get_bit(&beam_percent,2)) ? ~ITEM_FLAG1 : ~0;
20768 break;
20769
20770 case iXSword:
20771 itemsbuf[i].pickup_hearts = sword_hearts[3];
20772 itemsbuf[i].misc1 = beam_hearts[3];
20773 itemsbuf[i].misc2 = beam_power[3];
20774 itemsbuf[i].flags &= (!get_bit(&beam_percent,3)) ? ~ITEM_FLAG1 : ~0;
20775 break;
20776
20777 case iHookshot:
20778 itemsbuf[i].misc1 = hookshot_length;
20779 itemsbuf[i].misc2 = hookshot_links;
20780 break;
20781
20782 case iLongshot:
20783 itemsbuf[i].misc1 = longshot_length;
20784 itemsbuf[i].misc2 = longshot_links;
20785 break;
20786 }
20787 }
20788
20789
2/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<168)))
20790 {
20791 //was new subscreen rule
20792 temp_zinit.subscreen=get_bit(quest_rules,qr_FREEFORM)?1:0;
20793 set_bit(quest_rules,qr_FREEFORM,0);
20794 }
20795
20796
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<185)))
20797 {
20798 temp_zinit.start_dmap=0;
20799 }
20800
20801
2/6
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<186)))
20802 {
20803 temp_zinit.heroAnimationStyle=get_bit(quest_rules,qr_BSZELDA)?1:0;
20804 }
20805
20806
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if(s_version < 16 && get_bit(deprecated_rules, qr_COOLSCROLL+1))
20807 {
20808 //addOldStyleFamily(&temp_zinit, itemsbuf, itype_wallet, 4); //is this needed?
20809 temp_zinit.max_rupees=999;
20810 //temp_zinit.rupies=999; //This rule only gave you an invisible max wallet; it did not give you max rupies.
20811 }
20812
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(Header->zelda_version < 0x190) //1.84 bugfix. -Z
20813 {
20814 //temp_zinit.items[iBombBag] = true; //No, this is 30 max bombs!
20815 temp_zinit.max_bombs = 8;
20816 }
20817 // al_trace("About to copy over new init data values for quest made in: %x\n", Header->zelda_version);
20818 //time to ensure that we port all new values properly:
20819
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(Header->zelda_version < 0x250)
20820 {
20821 temp_zinit.max_sbombs = temp_zinit.bomb_ratio > 0 ? ( temp_zinit.max_bombs/temp_zinit.bomb_ratio ) : (temp_zinit.max_bombs/4);
20822 }
20823
20824
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(s_version > 21)
20825 {
20826
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_getc(&temp_zinit.hp_per_heart,f,true))
20827 {
20828 return qe_invalid;
20829 }
20830
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_getc(&temp_zinit.magic_per_block,f,true))
20831 {
20832 return qe_invalid;
20833 }
20834
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_getc(&temp_zinit.hero_damage_multiplier,f,true))
20835 {
20836 return qe_invalid;
20837 }
20838
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_getc(&temp_zinit.ene_damage_multiplier,f,true))
20839 {
20840 return qe_invalid;
20841 }
20842 20 }
20843 else
20844 {
20845 73 temp_zinit.hp_per_heart = 16; //HP_PER_HEART, previously hardcoded
20846 73 temp_zinit.magic_per_block = 32; //MAGICPERBLOCK, previously hardcoded
20847 73 temp_zinit.hero_damage_multiplier = 2; //DAMAGE_MULTIPLIER, previously hardcoded
20848 73 temp_zinit.ene_damage_multiplier = 4; //(HP_PER_HEART/4), previously hardcoded
20849 }
20850
20851
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(s_version > 22)
20852 {
20853
2/2
✓ Branch 0 taken 500 times.
✓ Branch 1 taken 20 times.
520 for(int32_t q = 0; q < 25; ++q)
20854 {
20855
2/4
✓ Branch 0 taken 500 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 500 times.
500 if(!p_igetw(&temp_zinit.scrcnt[q],f,true))
20856 {
20857 return qe_invalid;
20858 }
20859 500 }
20860
2/2
✓ Branch 0 taken 500 times.
✓ Branch 1 taken 20 times.
520 for(int32_t q = 0; q < 25; ++q)
20861 {
20862
2/4
✓ Branch 0 taken 500 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 500 times.
500 if(!p_igetw(&temp_zinit.scrmaxcnt[q],f,true))
20863 {
20864 return qe_invalid;
20865 }
20866 500 }
20867 20 }
20868 else
20869 {
20870
2/2
✓ Branch 0 taken 1825 times.
✓ Branch 1 taken 73 times.
1898 for(int32_t q = 0; q < 25; ++q)
20871 {
20872 1825 temp_zinit.scrcnt[q] = 0;
20873 1825 temp_zinit.scrmaxcnt[q] = 0;
20874 1825 }
20875 }
20876
20877
20878
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(s_version > 23)
20879 {
20880
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_getc(&temp_zinit.dither_type,f,true))
20881 {
20882 return qe_invalid;
20883 }
20884
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_getc(&temp_zinit.dither_arg,f,true))
20885 {
20886 return qe_invalid;
20887 }
20888
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_getc(&temp_zinit.dither_percent,f,true))
20889 {
20890 return qe_invalid;
20891 }
20892
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_getc(&temp_zinit.def_lightrad,f,true))
20893 {
20894 return qe_invalid;
20895 }
20896
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_getc(&temp_zinit.transdark_percent,f,true))
20897 {
20898 return qe_invalid;
20899 }
20900 20 }
20901 else
20902 {
20903 73 temp_zinit.dither_type = 0;
20904 73 temp_zinit.dither_arg = 0;
20905 73 temp_zinit.dither_percent = 20;
20906 73 temp_zinit.def_lightrad = 24;
20907 73 temp_zinit.transdark_percent = 0;
20908 }
20909
20910
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(s_version > 24)
20911 {
20912
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_getc(&temp_zinit.darkcol,f,true))
20913 {
20914 return qe_invalid;
20915 }
20916 20 }
20917 else
20918 {
20919 73 temp_zinit.darkcol = BLACK;
20920 }
20921
20922
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(s_version > 25)
20923 {
20924
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_igetl(&temp_zinit.gravity2,f,true))
20925 {
20926 return qe_invalid;
20927 }
20928
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_igetl(&temp_zinit.swimgravity,f,true))
20929 {
20930 return qe_invalid;
20931 }
20932 20 }
20933 else
20934 {
20935 73 temp_zinit.gravity2 = temp_zinit.gravity*100;
20936 73 temp_zinit.swimgravity = 5;
20937 }
20938
20939
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(s_version > 26)
20940 {
20941
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_igetw(&temp_zinit.heroSideswimUpStep,f,true))
20942 {
20943 return qe_invalid;
20944 }
20945
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_igetw(&temp_zinit.heroSideswimSideStep,f,true))
20946 {
20947 return qe_invalid;
20948 }
20949
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_igetw(&temp_zinit.heroSideswimDownStep,f,true))
20950 {
20951 return qe_invalid;
20952 }
20953 20 }
20954 else
20955 {
20956 73 temp_zinit.heroSideswimUpStep = 150;
20957 73 temp_zinit.heroSideswimSideStep = 100;
20958 73 temp_zinit.heroSideswimDownStep = 75;
20959 }
20960
20961
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(s_version > 27)
20962 {
20963
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_igetl(&temp_zinit.exitWaterJump,f,true))
20964 {
20965 return qe_invalid;
20966 }
20967 20 }
20968 else
20969 {
20970 73 temp_zinit.exitWaterJump = 0;
20971 }
20972
20973
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(s_version > 29)
20974 {
20975
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_igetl(&temp_zinit.bunny_ltm,f,true))
20976 {
20977 return qe_invalid;
20978 }
20979 20 }
20980 else
20981 {
20982 73 temp_zinit.bunny_ltm = 0;
20983 }
20984
20985
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(s_version > 30)
20986 {
20987
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_getc(&temp_zinit.switchhookstyle,f,true))
20988 {
20989 return qe_invalid;
20990 }
20991 20 }
20992 else
20993 {
20994 73 temp_zinit.switchhookstyle = 1;
20995 }
20996
20997
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 73 times.
93 if(s_version > 31)
20998 {
20999
2/4
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
20 if(!p_getc(&temp_zinit.magicdrainrate,f,true))
21000 {
21001 return qe_invalid;
21002 }
21003 20 }
21004 else
21005 {
21006
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 temp_zinit.magicdrainrate = (get_bit(temp_zinit.misc,idM_DOUBLEMAGIC) ? 1 : 2);
21007
1/2
✓ Branch 0 taken 73 times.
✗ Branch 1 not taken.
73 set_bit(temp_zinit.misc,idM_DOUBLEMAGIC,0);
21008 }
21009
21010
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 temp_zinit.clear_genscript();
21011
2/2
✓ Branch 0 taken 12 times.
✓ Branch 1 taken 81 times.
93 if(s_version > 32)
21012 {
21013 12 word numgenscript = 0;
21014
2/4
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
12 if(!p_igetw(&numgenscript,f,true))
21015 return qe_invalid;
21016
2/2
✓ Branch 0 taken 12 times.
✓ Branch 1 taken 1 times.
13 for(auto q = 1; q < numgenscript; ++q)
21017 {
21018
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 if(!p_getc(&padding,f,true))
21019 return qe_invalid;
21020
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if(!(padding&2))
21021 continue;
21022 1 temp_zinit.gen_doscript[q] = padding&1;
21023
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 if(!p_igetw(&temp_zinit.gen_exitState[q],f,true))
21024 return qe_invalid;
21025
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 if(!p_igetw(&temp_zinit.gen_reloadState[q],f,true))
21026 return qe_invalid;
21027
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 8 times.
9 for(auto p = 0; p < 8; ++p)
21028
2/4
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
8 if(!p_igetl(&temp_zinit.gen_initd[q][p],f,true))
21029 return qe_invalid;
21030
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 if(!p_igetl(&temp_zinit.gen_dataSize[q],f,true))
21031 return qe_invalid;
21032
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 if(!p_getlvec<int32_t>(&temp_zinit.gen_data[q],f,true))
21033 return qe_invalid;
21034
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 if(!p_igetl(&temp_zinit.gen_eventstate[q],f,true))
21035 return qe_invalid;
21036 1 }
21037 12 }
21038
21039
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(keepdata==true)
21040 {
21041
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 zinit = temp_zinit;
21042
21043
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(zinit.heroAnimationStyle==las_zelda3slow)
21044 {
21045 hero_animation_speed=2;
21046 }
21047 else
21048 {
21049 93 hero_animation_speed=1;
21050 }
21051 93 }
21052
21053 93 return 0;
21054 385 }
21055
21056 /*
21057 void setupitemdropsets()
21058 {
21059 for(int32_t i=0; i<isMAX; i++)
21060 {
21061 memcpy(&item_drop_sets[i], &default_item_drop_sets[i], sizeof(item_drop_object));
21062 }
21063 }
21064 */
21065
21066 93 int32_t readitemdropsets(PACKFILE *f, int32_t version, word build, bool keepdata)
21067 {
21068 93 build=build; // here to prevent compiler warnings
21069 dword dummy_dword;
21070 93 word item_drop_sets_to_read=0;
21071 item_drop_object tempitemdrop;
21072 93 word s_version=0, s_cversion=0;
21073
21074
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(keepdata)
21075 {
21076
2/2
✓ Branch 0 taken 23808 times.
✓ Branch 1 taken 93 times.
23901 for(int32_t i=0; i<MAXITEMDROPSETS; i++)
21077 {
21078 23808 memset(&item_drop_sets[i], 0, sizeof(item_drop_object));
21079 23808 }
21080 93 }
21081
21082
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(version > 0x192)
21083 {
21084 93 item_drop_sets_to_read=0;
21085
21086 //section version info
21087
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_version,f,true))
21088 {
21089 return qe_invalid;
21090 }
21091
21092 93 FFCore.quest_format[vItemDropsets] = s_version;
21093
21094 //al_trace("Item drop sets version %d\n", s_version);
21095
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_cversion,f,true))
21096 {
21097 return qe_invalid;
21098 }
21099
21100 //section size
21101
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&dummy_dword,f,true))
21102 {
21103 return qe_invalid;
21104 }
21105
21106 //finally... section data
21107
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&item_drop_sets_to_read,f,true))
21108 {
21109 return qe_invalid;
21110 }
21111 93 }
21112 else
21113 {
21114 if(keepdata==true)
21115 {
21116 init_item_drop_sets();
21117 }
21118 }
21119
21120
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(s_version>=1)
21121 {
21122
2/2
✓ Branch 0 taken 1805 times.
✓ Branch 1 taken 93 times.
1898 for(int32_t i=0; i<item_drop_sets_to_read; i++)
21123 {
21124
1/2
✓ Branch 0 taken 1805 times.
✗ Branch 1 not taken.
1805 if(!pfread(tempitemdrop.name,sizeof(tempitemdrop.name),f,true))
21125 {
21126 return qe_invalid;
21127 }
21128
21129
2/2
✓ Branch 0 taken 18050 times.
✓ Branch 1 taken 1805 times.
19855 for(int32_t j=0; j<10; ++j)
21130 {
21131
1/2
✓ Branch 0 taken 18050 times.
✗ Branch 1 not taken.
18050 if(!p_igetw(&tempitemdrop.item[j],f,true))
21132 {
21133 return qe_invalid;
21134 }
21135 18050 }
21136
21137
2/2
✓ Branch 0 taken 19855 times.
✓ Branch 1 taken 1805 times.
21660 for(int32_t j=0; j<11; ++j)
21138 {
21139
1/2
✓ Branch 0 taken 19855 times.
✗ Branch 1 not taken.
19855 if(!p_igetw(&tempitemdrop.chance[j],f,true))
21140 {
21141 return qe_invalid;
21142 }
21143 19855 }
21144
21145 // Dec 2008: Addition of the 'Tall Grass' set, #12,
21146 // overrides the quest's set #12.
21147
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 1805 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1805 if(s_version<2 && i==12)
21148 continue;
21149
21150 // Deprecated: qr_NOCLOCKS and qr_ALLOW10RUPEEDROPS
21151
1/4
✓ Branch 0 taken 1805 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1805 if(s_version<2) for(int32_t j=0; j<10; ++j)
21152 {
21153 int32_t it = tempitemdrop.item[j];
21154
21155 if((itemsbuf[it].family == itype_rupee
21156 && ((itemsbuf[it].amount)&0xFFF) == 10)
21157 && !get_bit(deprecated_rules, qr_ALLOW10RUPEEDROPS_DEP))
21158 {
21159 tempitemdrop.chance[j+1]=0;
21160 }
21161 else if(itemsbuf[it].family == itype_clock && get_bit(deprecated_rules, qr_NOCLOCKS_DEP))
21162 {
21163 tempitemdrop.chance[j+1]=0;
21164 }
21165
21166 // From Sept 2007 to Dec 2008, non-gameplay items were prohibited.
21167 if(itemsbuf[it].family == itype_misc)
21168 {
21169 // If a non-gameplay item was selected, then item drop was aborted.
21170 // Reflect this by increasing the 'Nothing' chance accordingly.
21171 tempitemdrop.chance[0]+=tempitemdrop.chance[j+1];
21172 tempitemdrop.chance[j+1]=0;
21173 }
21174 }
21175
21176
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1805 times.
1805 if(keepdata)
21177 {
21178 1805 memcpy(&item_drop_sets[i], &tempitemdrop, sizeof(item_drop_object));
21179 1805 }
21180 1805 }
21181 93 }
21182
21183 93 return 0;
21184 93 }
21185
21186 93 int32_t readfavorites(PACKFILE *f, int32_t, word, bool keepdata)
21187 {
21188 int32_t temp_num;
21189 dword dummy_dword;
21190 word num_favorite_combos;
21191 word num_favorite_combo_aliases;
21192 93 word s_version=0, s_cversion=0;
21193
21194 //section version info
21195
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(!p_igetw(&s_version,f,true))
21196 {
21197 return qe_invalid;
21198 }
21199
21200 93 FFCore.quest_format[vFavourites] = s_version;
21201
21202
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&s_cversion,f,true))
21203 {
21204 return qe_invalid;
21205 }
21206
21207 //section size
21208
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetl(&dummy_dword,f,true))
21209 {
21210 return qe_invalid;
21211 }
21212
21213 //finally... section data
21214
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&num_favorite_combos,f,true))
21215 {
21216 return qe_invalid;
21217 }
21218
21219
2/2
✓ Branch 0 taken 9300 times.
✓ Branch 1 taken 93 times.
9393 for(int32_t i=0; i<num_favorite_combos; i++)
21220 {
21221
1/2
✓ Branch 0 taken 9300 times.
✗ Branch 1 not taken.
9300 if(!p_igetl(&temp_num,f,true))
21222 {
21223 return qe_invalid;
21224 }
21225
21226
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9300 times.
9300 if(keepdata)
21227 {
21228 9300 favorite_combos[i]=temp_num;
21229 9300 }
21230 9300 }
21231
21232
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_igetw(&num_favorite_combo_aliases,f,true))
21233 {
21234 return qe_invalid;
21235 }
21236
21237
2/2
✓ Branch 0 taken 9300 times.
✓ Branch 1 taken 93 times.
9393 for(int32_t i=0; i<num_favorite_combo_aliases; i++)
21238 {
21239
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9300 times.
9300 if(!p_igetl(&temp_num,f,true))
21240 {
21241 return qe_invalid;
21242 }
21243
21244
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9300 times.
9300 if(keepdata)
21245 {
21246 9300 favorite_comboaliases[i]=temp_num;
21247 9300 }
21248 9300 }
21249
21250 93 return 0;
21251 93 }
21252
21253 /*
21254 switch (ret) {
21255 case 0:
21256 break;
21257
21258 case qe_invalid:
21259 goto invalid;
21260 break;
21261 default:
21262 pack_fclose(f);
21263 if(!oldquest)
21264 delete_file(tmpfilename);
21265 return ret;
21266 break;
21267 }
21268 */
21269
21270 const char *skip_text[skip_max]=
21271 {
21272 "skip_header", "skip_rules", "skip_strings", "skip_misc",
21273 "skip_tiles", "skip_combos", "skip_comboaliases", "skip_csets",
21274 "skip_maps", "skip_dmaps", "skip_doors", "skip_items",
21275 "skip_weapons", "skip_colors", "skip_icons", "skip_initdata",
21276 "skip_guys", "skip_herosprites", "skip_subscreens", "skip_ffscript",
21277 "skip_sfx", "skip_midis", "skip_cheats", "skip_itemdropsets",
21278 "skip_favorites"
21279 };
21280
21281
21282 void port250QuestRules(){
21283
21284 portCandleRules(); //Candle
21285 portBombRules();
21286
21287 }
21288
21289 void portCandleRules()
21290 {
21291 bool hurtshero = get_bit(quest_rules,qr_FIREPROOFHERO);
21292 //itemdata itemsbuf;
21293 for ( int32_t q = 0; q < MAXITEMS; q++ )
21294 {
21295 if ( itemsbuf[q].family == itype_candle )
21296 {
21297 if ( hurtshero ) itemsbuf[q].flags |= ITEM_FLAG2;
21298 else itemsbuf[q].flags &= ~ ITEM_FLAG2;
21299 }
21300 }
21301 }
21302
21303 void portBombRules()
21304 {
21305 bool hurtshero = get_bit(quest_rules,qr_OUCHBOMBS);
21306 //itemdata itemsbuf;
21307 for ( int32_t q = 0; q < MAXITEMS; q++ )
21308 {
21309 if ( itemsbuf[q].family == itype_bomb )
21310 {
21311 if ( hurtshero ) itemsbuf[q].flags |= ITEM_FLAG2;
21312 else itemsbuf[q].flags &= ~ ITEM_FLAG2;
21313 }
21314 }
21315
21316 }
21317
21318 //Internal function for loadquest wrapper
21319 93 int32_t _lq_int(const char *filename, zquestheader *Header, miscQdata *Misc, zctune *tunes, bool show_progress, bool compressed, bool encrypted, bool keepall, const byte *skip_flags, byte printmetadata)
21320 {
21321 93 DMapEditorLastMaptileUsed = 0;
21322 93 combosread=false;
21323 93 mapsread=false;
21324 93 fixffcs=false;
21325
21326
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if(get_debug()&&(key[KEY_LSHIFT]||key[KEY_RSHIFT]))
21327 {
21328 keepall=false;
21329 jwin_alert("Load Quest","Data retention disabled.",NULL,NULL,"OK",NULL,13,27,lfont);
21330 }
21331
21332 // show_progress=true;
21333 char tmpfilename[L_tmpnam];
21334 93 temp_name(tmpfilename);
21335 // char percent_done[30];
21336 93 bool catchup=false;
21337 byte tempbyte;
21338 93 word old_map_count=map_count;
21339
21340 93 byte old_quest_rules[QUESTRULES_NEW_SIZE] = {0};
21341 93 byte old_extra_rules[EXTRARULES_SIZE] = {0};
21342 93 byte old_midi_flags[MIDIFLAGS_SIZE] = {0};
21343
21344
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if(keepall==false||get_bit(skip_flags, skip_rules))
21345 {
21346 memcpy(old_quest_rules, quest_rules, QUESTRULES_NEW_SIZE);
21347 memcpy(old_extra_rules, extra_rules, EXTRARULES_SIZE);
21348 }
21349
21350 93 memset(quest_rules, 0, QUESTRULES_NEW_SIZE); //clear here to prevent any kind of carryover -Z
21351 // memset(extra_rules, 0, EXTRARULES_SIZE); //clear here to prevent any kind of carryover -Z
21352
21353
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if(keepall==false||get_bit(skip_flags, skip_midis))
21354 {
21355 memcpy(old_midi_flags, midi_flags, MIDIFLAGS_SIZE);
21356 }
21357
21358
21359
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if(keepall&&!get_bit(skip_flags, skip_ffscript))
21360 {
21361 93 zScript.clear();
21362 93 globalmap.clear();
21363 93 genericmap.clear();
21364 93 ffcmap.clear();
21365 93 itemmap.clear();
21366 93 npcmap.clear();
21367 93 ewpnmap.clear();
21368 93 lwpnmap.clear();
21369 93 playermap.clear();
21370 93 dmapmap.clear();
21371 93 screenmap.clear();
21372 93 itemspritemap.clear();
21373 93 comboscriptmap.clear();
21374
21375
2/2
✓ Branch 0 taken 47523 times.
✓ Branch 1 taken 93 times.
47616 for(int32_t i=0; i<NUMSCRIPTFFC-1; i++)
21376 {
21377 47523 ffcmap[i].clear();
21378 47523 }
21379
21380 93 globalmap[0].slotname = "Slot 1:";
21381 93 globalmap[0].scriptname = "~Init";
21382 93 globalmap[0].update();
21383
21384
2/2
✓ Branch 0 taken 651 times.
✓ Branch 1 taken 93 times.
744 for(int32_t i=1; i<NUMSCRIPTGLOBAL; i++)
21385 {
21386 651 globalmap[i].clear();
21387 651 }
21388
21389
2/2
✓ Branch 0 taken 23715 times.
✓ Branch 1 taken 93 times.
23808 for(int32_t i=0; i<NUMSCRIPTITEM-1; i++)
21390 {
21391 23715 itemmap[i].clear();
21392 23715 }
21393
21394 //new script types -- prevent carrying over to a quest that you load after reading them
21395 //e.g., a quest has an npc script, and you make a blank quest, that now believes that it has an npc script, too!
21396
2/2
✓ Branch 0 taken 23715 times.
✓ Branch 1 taken 93 times.
23808 for(int32_t i=0; i<NUMSCRIPTGUYS-1; i++)
21397 {
21398 23715 npcmap[i].clear();
21399 23715 }
21400
2/2
✓ Branch 0 taken 23715 times.
✓ Branch 1 taken 93 times.
23808 for(int32_t i=0; i<NUMSCRIPTWEAPONS-1; i++)
21401 {
21402 23715 lwpnmap[i].clear();
21403 23715 }
21404
2/2
✓ Branch 0 taken 23715 times.
✓ Branch 1 taken 93 times.
23808 for(int32_t i=0; i<NUMSCRIPTWEAPONS-1; i++)
21405 {
21406 23715 ewpnmap[i].clear();
21407 23715 }
21408
2/2
✓ Branch 0 taken 372 times.
✓ Branch 1 taken 93 times.
465 for(int32_t i=0; i<NUMSCRIPTPLAYER-1; i++)
21409 {
21410 372 playermap[i].clear();
21411 372 }
21412
2/2
✓ Branch 0 taken 23715 times.
✓ Branch 1 taken 93 times.
23808 for(int32_t i=0; i<NUMSCRIPTSDMAP-1; i++)
21413 {
21414 23715 dmapmap[i].clear();
21415 23715 }
21416
2/2
✓ Branch 0 taken 23715 times.
✓ Branch 1 taken 93 times.
23808 for(int32_t i=0; i<NUMSCRIPTSCREEN-1; i++)
21417 {
21418 23715 screenmap[i].clear();
21419 23715 }
21420
2/2
✓ Branch 0 taken 23715 times.
✓ Branch 1 taken 93 times.
23808 for(int32_t i=0; i<NUMSCRIPTSITEMSPRITE-1; i++)
21421 {
21422 23715 itemspritemap[i].clear();
21423 23715 }
21424
2/2
✓ Branch 0 taken 47523 times.
✓ Branch 1 taken 93 times.
47616 for(int32_t i=0; i<NUMSCRIPTSCOMBODATA-1; i++)
21425 {
21426 47523 comboscriptmap[i].clear();
21427 47523 }
21428
2/2
✓ Branch 0 taken 47523 times.
✓ Branch 1 taken 93 times.
47616 for(int32_t i=0; i<NUMSCRIPTSGENERIC-1; i++)
21429 {
21430 47523 genericmap[i].clear();
21431 47523 }
21432
21433 93 reset_scripts();
21434 93 }
21435
21436 zquestheader tempheader;
21437 93 memset(&tempheader, 0, sizeof(zquestheader));
21438 93 zinfo tempzi;
21439 93 tempzi.clear();
21440 93 load_tmp_zi = &tempzi;
21441
21442 // oldquest flag is set when an unencrypted qst file is suspected.
21443 93 bool oldquest = false;
21444 93 int32_t open_error=0;
21445 char deletefilename[1024];
21446 93 PACKFILE *f=open_quest_file(&open_error, filename, deletefilename, compressed, encrypted, show_progress);
21447
21448
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(!f)
21449 return open_error;
21450 char zinfofilename[2048];
21451 93 replace_extension(zinfofilename, filename, "zinfo", 2047);
21452 93 int32_t ret=0;
21453
21454 //header
21455 93 box_out("Reading Header...");
21456 93 ret=readheader(f, &tempheader, true, printmetadata);
21457
1/5
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21458 93 box_out("okay.");
21459 93 box_eol();
21460
21461
2/2
✓ Branch 0 taken 73 times.
✓ Branch 1 taken 20 times.
93 if(read_zinfo)
21462 {
21463 20 box_out("Reading ZInfo - ");
21464
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 19 times.
20 box_out(read_ext_zinfo ? "External..." : "Internal...");
21465
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 19 times.
20 if(read_ext_zinfo)
21466 {
21467 1 PACKFILE *inf=pack_fopen_password(zinfofilename, F_READ, "");
21468 1 ret=readzinfo(inf, tempzi, tempheader);
21469
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if(inf) pack_fclose(inf);
21470
1/5
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
1 checkstatus(ret);
21471 1 }
21472 else
21473 {
21474 19 ret=readzinfo(f, tempzi, tempheader);
21475
1/5
✗ Branch 0 not taken.
✓ Branch 1 taken 19 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
19 checkstatus(ret);
21476 }
21477 20 box_out("okay.");
21478 20 box_eol();
21479 20 }
21480
21481
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(tempheader.zelda_version>=0x193)
21482 {
21483 dword section_id;
21484
21485 //section id
21486
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(!p_mgetl(&section_id,f,true))
21487 {
21488 return qe_invalid;
21489 }
21490
21491
2/2
✓ Branch 0 taken 2232 times.
✓ Branch 1 taken 93 times.
2325 while(!pack_feof(f))
21492 {
21493
24/25
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
✓ Branch 2 taken 93 times.
✓ Branch 3 taken 93 times.
✓ Branch 4 taken 93 times.
✓ Branch 5 taken 93 times.
✓ Branch 6 taken 93 times.
✓ Branch 7 taken 93 times.
✓ Branch 8 taken 93 times.
✓ Branch 9 taken 93 times.
✓ Branch 10 taken 93 times.
✓ Branch 11 taken 93 times.
✓ Branch 12 taken 93 times.
✓ Branch 13 taken 93 times.
✓ Branch 14 taken 93 times.
✓ Branch 15 taken 93 times.
✓ Branch 16 taken 93 times.
✓ Branch 17 taken 93 times.
✓ Branch 18 taken 93 times.
✓ Branch 19 taken 93 times.
✓ Branch 20 taken 93 times.
✓ Branch 21 taken 93 times.
✓ Branch 22 taken 93 times.
✓ Branch 23 taken 93 times.
✓ Branch 24 taken 93 times.
2232 switch(section_id)
21494 {
21495 case ID_RULES:
21496
21497 //rules
21498
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21499 {
21500 box_out("found.");
21501 box_eol();
21502 catchup=false;
21503 }
21504
21505 93 box_out("Reading Rules...");
21506
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readrules(f, &tempheader, keepall&&!get_bit(skip_flags, skip_rules));
21507
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21508 93 box_out("okay.");
21509 93 box_eol();
21510 93 break;
21511
21512 case ID_STRINGS:
21513
21514 //strings
21515
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21516 {
21517 box_out("found.");
21518 box_eol();
21519 catchup=false;
21520 }
21521
21522 93 box_out("Reading Strings...");
21523
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readstrings(f, &tempheader, keepall&&!get_bit(skip_flags, skip_strings));
21524
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21525 93 box_out("okay.");
21526 93 box_eol();
21527 93 break;
21528
21529 case ID_MISC:
21530
21531 //misc data
21532
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21533 {
21534 box_out("found.");
21535 box_eol();
21536 catchup=false;
21537 }
21538
21539 93 box_out("Reading Misc. Data...");
21540
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readmisc(f, &tempheader, Misc, keepall&&!get_bit(skip_flags, skip_misc));
21541
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21542 93 box_out("okay.");
21543 93 box_eol();
21544 93 break;
21545
21546 case ID_TILES:
21547
21548 //tiles
21549
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21550 {
21551 box_out("found.");
21552 box_eol();
21553 catchup=false;
21554 }
21555
21556 93 box_out("Reading Tiles...");
21557
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readtiles(f, newtilebuf, &tempheader, tempheader.zelda_version, tempheader.build, 0, NEWMAXTILES, false, keepall&&!get_bit(skip_flags, skip_tiles));
21558
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21559 93 box_out("okay.");
21560 93 box_eol();
21561 93 break;
21562
21563 case ID_COMBOS:
21564
21565 //combos
21566
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21567 {
21568 box_out("found.");
21569 box_eol();
21570 catchup=false;
21571 }
21572
21573 93 box_out("Reading Combos...");
21574
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readcombos(f, &tempheader, tempheader.zelda_version, tempheader.build, 0, MAXCOMBOS, keepall&&!get_bit(skip_flags, skip_combos));
21575 93 combosread=true;
21576
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21577 93 box_out("okay.");
21578 93 box_eol();
21579 93 break;
21580
21581 case ID_COMBOALIASES:
21582
21583 //combo aliases
21584
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21585 {
21586 box_out("found.");
21587 box_eol();
21588 catchup=false;
21589 }
21590
21591 93 box_out("Reading Combo Aliases...");
21592
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readcomboaliases(f, &tempheader, tempheader.zelda_version, tempheader.build, keepall&&!get_bit(skip_flags, skip_comboaliases));
21593
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21594 93 box_out("okay.");
21595 93 box_eol();
21596 93 break;
21597
21598 case ID_CSETS:
21599
21600 //color data
21601
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21602 {
21603 box_out("found.");
21604 box_eol();
21605 catchup=false;
21606 }
21607
21608 93 box_out("Reading Color Data...");
21609
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readcolordata(f, Misc, tempheader.zelda_version, tempheader.build, 0, newerpdTOTAL, keepall&&!get_bit(skip_flags, skip_csets));
21610
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21611 93 box_out("okay.");
21612 93 box_eol();
21613 93 break;
21614
21615 case ID_MAPS:
21616
21617 //maps
21618
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21619 {
21620 box_out("found.");
21621 box_eol();
21622 catchup=false;
21623 }
21624
21625 93 box_out("Reading Maps...");
21626
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readmaps(f, &tempheader, keepall&&!get_bit(skip_flags, skip_maps));
21627 93 mapsread=true;
21628
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21629 93 box_out("okay.");
21630 93 box_eol();
21631 93 break;
21632
21633 case ID_DMAPS:
21634
21635 //dmaps
21636
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21637 {
21638 box_out("found.");
21639 box_eol();
21640 catchup=false;
21641 }
21642
21643 93 box_out("Reading DMaps...");
21644
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readdmaps(f, &tempheader, tempheader.zelda_version, tempheader.build, 0, MAXDMAPS, keepall&&!get_bit(skip_flags, skip_dmaps));
21645
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21646 93 box_out("okay.");
21647 93 box_eol();
21648 93 break;
21649
21650 case ID_DOORS:
21651
21652 //door combo sets
21653
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21654 {
21655 box_out("found.");
21656 box_eol();
21657 catchup=false;
21658 }
21659
21660 93 box_out("Reading Doors...");
21661
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readdoorcombosets(f, &tempheader, keepall&&!get_bit(skip_flags, skip_doors));
21662
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21663 93 box_out("okay.");
21664 93 box_eol();
21665 93 break;
21666
21667 case ID_ITEMS:
21668
21669 //items
21670
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21671 {
21672 box_out("found.");
21673 box_eol();
21674 catchup=false;
21675 }
21676
21677 93 box_out("Reading Items...");
21678
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readitems(f, tempheader.zelda_version, tempheader.build, keepall&&!get_bit(skip_flags, skip_items));
21679
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21680
21681 93 box_out("okay.");
21682 93 box_eol();
21683 93 break;
21684
21685 case ID_WEAPONS:
21686
21687 //weapons
21688
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21689 {
21690 box_out("found.");
21691 box_eol();
21692 catchup=false;
21693 }
21694
21695 93 box_out("Reading Weapons...");
21696
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readweapons(f, &tempheader, keepall&&!get_bit(skip_flags, skip_weapons));
21697
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21698 93 box_out("okay.");
21699 93 box_eol();
21700 93 break;
21701
21702 case ID_COLORS:
21703
21704 //misc. colors
21705
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21706 {
21707 box_out("found.");
21708 box_eol();
21709 catchup=false;
21710 }
21711
21712 93 box_out("Reading Misc. Colors...");
21713
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readmisccolors(f, &tempheader, Misc, keepall&&!get_bit(skip_flags, skip_colors));
21714
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21715 93 box_out("okay.");
21716 93 box_eol();
21717 93 break;
21718
21719 case ID_ICONS:
21720
21721 //game icons
21722
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21723 {
21724 box_out("found.");
21725 box_eol();
21726 catchup=false;
21727 }
21728
21729 93 box_out("Reading Game Icons...");
21730
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readgameicons(f, &tempheader, Misc, keepall&&!get_bit(skip_flags, skip_icons));
21731
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21732 93 box_out("okay.");
21733 93 box_eol();
21734 93 break;
21735
21736 case ID_INITDATA:
21737
21738 //initialization data
21739
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21740 {
21741 box_out("found.");
21742 box_eol();
21743 catchup=false;
21744 }
21745
21746 93 box_out("Reading Init. Data...");
21747
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readinitdata(f, &tempheader, keepall&&!get_bit(skip_flags, skip_initdata));
21748
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21749 93 box_out("okay.");
21750 93 box_eol();
21751
21752
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if(keepall&&!get_bit(skip_flags, skip_subscreens))
21753 {
21754
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 13 times.
93 if(zinit.subscreen!=ssdtMAX) //not using custom subscreens
21755 {
21756 13 setupsubscreens();
21757
21758
2/2
✓ Branch 0 taken 6656 times.
✓ Branch 1 taken 13 times.
6669 for(int32_t i=0; i<MAXDMAPS; ++i)
21759 {
21760 6656 int32_t type=DMaps[i].type&dmfTYPE;
21761
2/2
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 6643 times.
6656 DMaps[i].active_subscreen=(type == dmOVERW || type == dmBSOVERW)?0:1;
21762 6656 DMaps[i].passive_subscreen=(get_bit(quest_rules,qr_ENABLEMAGIC))?0:1;
21763 6656 }
21764 13 }
21765 93 }
21766
21767
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if(keepall&&!get_bit(skip_flags, skip_sfx))
21768 {
21769 93 setupsfx();
21770 93 }
21771
21772
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if(keepall&&!get_bit(skip_flags, skip_itemdropsets))
21773 {
21774 93 init_item_drop_sets();
21775 93 }
21776
21777
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if(keepall&&!get_bit(skip_flags, skip_favorites))
21778 {
21779 93 init_favorites();
21780 93 }
21781
21782 93 break;
21783
21784 case ID_GUYS:
21785
21786 //guys
21787
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21788 {
21789 box_out("found.");
21790 box_eol();
21791 catchup=false;
21792 }
21793
21794 93 box_out("Reading Custom Guy Data...");
21795
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readguys(f, &tempheader, keepall&&!get_bit(skip_flags, skip_guys));
21796
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21797 93 box_out("okay.");
21798 93 box_eol();
21799 93 break;
21800
21801 case ID_HEROSPRITES:
21802
21803 //player sprites
21804
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21805 {
21806 box_out("found.");
21807 box_eol();
21808 catchup=false;
21809 }
21810
21811 93 box_out("Reading Custom Player Sprite Data...");
21812
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readherosprites(f, &tempheader, keepall&&!get_bit(skip_flags, skip_herosprites));
21813
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21814 93 box_out("okay.");
21815 93 box_eol();
21816 93 break;
21817
21818 case ID_SUBSCREEN:
21819
21820 //custom subscreens
21821
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21822 {
21823 box_out("found.");
21824 box_eol();
21825 catchup=false;
21826 }
21827
21828 93 box_out("Reading Custom Subscreen Data...");
21829
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readsubscreens(f, &tempheader, keepall&&!get_bit(skip_flags, skip_subscreens));
21830
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21831 93 box_out("okay.");
21832 93 box_eol();
21833 93 break;
21834
21835 case ID_FFSCRIPT:
21836
21837 //Freeform combo scripts
21838
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21839 {
21840 box_out("found.");
21841 box_eol();
21842 catchup=false;
21843 }
21844
21845 93 box_out("Reading FF Script Data...");
21846
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readffscript(f, &tempheader, keepall&&!get_bit(skip_flags, skip_ffscript));
21847
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21848 93 box_out("okay.");
21849 93 box_eol();
21850 93 break;
21851
21852 case ID_SFX:
21853
21854 //SFX data
21855
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21856 {
21857 box_out("found.");
21858 box_eol();
21859 catchup=false;
21860 }
21861
21862 93 box_out("Reading SFX Data...");
21863
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readsfx(f, &tempheader, keepall&&!get_bit(skip_flags, skip_sfx));
21864
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21865 93 box_out("okay.");
21866 93 box_eol();
21867 93 break;
21868
21869 case ID_MIDIS:
21870
21871 //midis
21872
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21873 {
21874 box_out("found.");
21875 box_eol();
21876 catchup=false;
21877 }
21878
21879 93 box_out("Reading Tunes...");
21880
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readtunes(f, &tempheader, tunes, keepall&&!get_bit(skip_flags, skip_midis));
21881
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21882 93 box_out("okay.");
21883 93 box_eol();
21884 93 break;
21885
21886 case ID_CHEATS:
21887
21888 //cheat codes
21889
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21890 {
21891 box_out("found.");
21892 box_eol();
21893 catchup=false;
21894 }
21895
21896 93 box_out("Reading Cheat Codes...");
21897
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readcheatcodes(f, &tempheader, keepall&&!get_bit(skip_flags, skip_cheats));
21898
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21899 93 box_out("okay.");
21900 93 box_eol();
21901 93 break;
21902
21903 case ID_ITEMDROPSETS:
21904
21905 //item drop sets
21906
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21907 {
21908 box_out("found.");
21909 box_eol();
21910 catchup=false;
21911 }
21912
21913 93 box_out("Reading Item Drop Sets...");
21914
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readitemdropsets(f, tempheader.zelda_version, tempheader.build, keepall&&!get_bit(skip_flags, skip_itemdropsets));
21915
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21916 93 box_out("okay.");
21917 93 box_eol();
21918 93 break;
21919
21920 case ID_FAVORITES:
21921
21922 //favorite combos and combo aliases
21923
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(catchup)
21924 {
21925 box_out("found.");
21926 box_eol();
21927 catchup=false;
21928 }
21929
21930 93 box_out("Reading Favorite Combos...");
21931
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 ret=readfavorites(f, tempheader.zelda_version, tempheader.build, keepall&&!get_bit(skip_flags, skip_favorites));
21932
1/5
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
93 checkstatus(ret);
21933 93 box_out("okay.");
21934 93 box_eol();
21935 93 break;
21936
21937 default:
21938 if(!catchup)
21939 {
21940 box_out("Bad token! Searching...");
21941 box_eol();
21942 }
21943
21944 catchup=true;
21945 break;
21946 }
21947
21948
21949
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2232 times.
2232 if(catchup)
21950 {
21951 //section id
21952 section_id=(section_id<<8);
21953
21954 if(!p_getc(&tempbyte,f,true))
21955 {
21956 return qe_invalid;
21957 }
21958
21959 section_id+=tempbyte;
21960 }
21961
21962 else
21963 {
21964 //section id
21965
2/2
✓ Branch 0 taken 93 times.
✓ Branch 1 taken 2139 times.
2232 if(!pack_feof(f))
21966 {
21967
1/2
✓ Branch 0 taken 2139 times.
✗ Branch 1 not taken.
2139 if(!p_mgetl(&section_id,f,true))
21968 {
21969 return qe_invalid;
21970 }
21971 2139 }
21972 }
21973 }
21974 93 }
21975 else
21976 {
21977 //rules
21978 box_out("Reading Rules...");
21979 ret=readrules(f, &tempheader, keepall&&!get_bit(skip_flags, skip_rules));
21980 checkstatus(ret);
21981 box_out("okay.");
21982 box_eol();
21983
21984 //strings
21985 box_out("Reading Strings...");
21986 ret=readstrings(f, &tempheader, keepall&&!get_bit(skip_flags, skip_strings));
21987 checkstatus(ret);
21988 box_out("okay.");
21989 box_eol();
21990
21991 //door combo sets
21992 box_out("Reading Doors...");
21993 ret=readdoorcombosets(f, &tempheader, keepall&&!get_bit(skip_flags, skip_doors));
21994 checkstatus(ret);
21995 box_out("okay.");
21996 box_eol();
21997
21998 //dmaps
21999 box_out("Reading DMaps...");
22000 ret=readdmaps(f, &tempheader, tempheader.zelda_version, tempheader.build, 0, MAXDMAPS, keepall&&!get_bit(skip_flags, skip_dmaps));
22001 checkstatus(ret);
22002 box_out("okay.");
22003 box_eol();
22004
22005 // misc data
22006 box_out("Reading Misc. Data...");
22007 ret=readmisc(f, &tempheader, Misc, keepall&&!get_bit(skip_flags, skip_misc));
22008 checkstatus(ret);
22009 box_out("okay.");
22010 box_eol();
22011
22012 //items
22013 box_out("Reading Items...");
22014 ret=readitems(f, tempheader.zelda_version, tempheader.build, keepall&&!get_bit(skip_flags, skip_items));
22015 checkstatus(ret);
22016 box_out("okay.");
22017 box_eol();
22018
22019 //weapons
22020 box_out("Reading Weapons...");
22021 ret=readweapons(f, &tempheader, keepall&&!get_bit(skip_flags, skip_weapons));
22022 checkstatus(ret);
22023 box_out("okay.");
22024 box_eol();
22025
22026 //guys
22027 box_out("Reading Custom Guy Data...");
22028 ret=readguys(f, &tempheader, keepall&&!get_bit(skip_flags, skip_guys));
22029 checkstatus(ret);
22030 box_out("okay.");
22031 box_eol();
22032
22033 //maps
22034 box_out("Reading Maps...");
22035 ret=readmaps(f, &tempheader, keepall&&!get_bit(skip_flags, skip_maps));
22036 mapsread=true;
22037 checkstatus(ret);
22038 box_out("okay.");
22039 box_eol();
22040
22041 //combos
22042 box_out("Reading Combos...");
22043 ret=readcombos(f, &tempheader, tempheader.zelda_version, tempheader.build, 0, MAXCOMBOS, keepall&&!get_bit(skip_flags, skip_combos));
22044 combosread=true;
22045 checkstatus(ret);
22046 box_out("okay.");
22047 box_eol();
22048
22049 //color data
22050 box_out("Reading Color Data...");
22051 ret=readcolordata(f, Misc, tempheader.zelda_version, tempheader.build, 0, newerpdTOTAL, keepall&&!get_bit(skip_flags, skip_csets));
22052 checkstatus(ret);
22053 box_out("okay.");
22054 box_eol();
22055
22056 //tiles
22057 box_out("Reading Tiles...");
22058 ret=readtiles(f, newtilebuf, &tempheader, tempheader.zelda_version, tempheader.build, 0, NEWMAXTILES, false, keepall&&!get_bit(skip_flags, skip_tiles));
22059 checkstatus(ret);
22060 box_out("okay.");
22061 box_eol();
22062
22063 //midis
22064 box_out("Reading Tunes...");
22065 ret=readtunes(f, &tempheader, tunes, keepall&&!get_bit(skip_flags, skip_midis));
22066 checkstatus(ret);
22067 box_out("okay.");
22068 box_eol();
22069
22070 //cheat codes
22071 box_out("Reading Cheat Codes...");
22072 ret=readcheatcodes(f, &tempheader, keepall&&!get_bit(skip_flags, skip_cheats));
22073 checkstatus(ret);
22074 box_out("okay.");
22075 box_eol();
22076
22077 //initialization data
22078 box_out("Reading Init. Data...");
22079 ret=readinitdata(f, &tempheader, keepall&&!get_bit(skip_flags, skip_initdata));
22080 checkstatus(ret);
22081 box_out("okay.");
22082 box_eol();
22083
22084 if(keepall&&!get_bit(skip_flags, skip_subscreens))
22085 {
22086 setupsubscreens();
22087
22088 for(int32_t i=0; i<MAXDMAPS; ++i)
22089 {
22090 int32_t type=DMaps[i].type&dmfTYPE;
22091 DMaps[i].active_subscreen=(type == dmOVERW || type == dmBSOVERW)?0:1;
22092 DMaps[i].passive_subscreen=(get_bit(quest_rules,qr_ENABLEMAGIC))?0:1;
22093 }
22094 }
22095
22096 box_out("Setting Up Default Sound Effects...");
22097
22098 if(keepall&&!get_bit(skip_flags, skip_sfx))
22099 setupsfx();
22100
22101 box_out("okay.");
22102 box_eol();
22103
22104 //player sprites
22105 box_out("Reading Custom Player Sprite Data...");
22106 ret=readherosprites2(f, -1, 0, keepall&&!get_bit(skip_flags, skip_herosprites));
22107 checkstatus(ret);
22108 box_out("okay.");
22109 box_eol();
22110
22111 box_out("Setting Up Default Item Drop Sets...");
22112 ret=readitemdropsets(f, -1, 0, keepall&&!get_bit(skip_flags, skip_itemdropsets));
22113 box_out("okay.");
22114 box_eol();
22115 }
22116
22117 93 init_spritelists();
22118
22119 // check data
22120
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(f)
22121 {
22122 93 pack_fclose(f);
22123 93 }
22124
22125
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
93 if(!oldquest)
22126 {
22127
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if(exists(tmpfilename))
22128 {
22129 delete_file(tmpfilename);
22130 }
22131 93 }
22132
22133
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 93 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
93 if(fixffcs && combosread && mapsread)
22134 {
22135 for(int32_t i=0; i<map_count; i++)
22136 {
22137 for(int32_t j=0; j<MAPSCRS; j++)
22138 {
22139 for(int32_t m=0; m<32; m++)
22140 {
22141 if(combobuf[TheMaps[(i*MAPSCRS)+j].ffcs[m].getData()].type == cCHANGE)
22142 TheMaps[(i*MAPSCRS)+j].ffcs[m].flags|=ffCHANGER;
22143 }
22144 }
22145 }
22146 }
22147
22148
2/2
✓ Branch 0 taken 75 times.
✓ Branch 1 taken 18 times.
93 if(get_bit(quest_rules, qr_CONTFULL_DEP))
22149 {
22150 18 set_bit(quest_rules, qr_CONTFULL_DEP, 0);
22151 18 set_bit(zinit.misc, idM_CONTPERCENT, 1);
22152 18 zinit.cont_heart=100;
22153 18 zinit.start_heart=zinit.hc;
22154 18 }
22155
22156 93 box_out("Done.");
22157 93 box_eol();
22158 93 box_end(false);
22159
22160 // if (keepall==true||!get_bit(skip_flags, skip_header))
22161
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if(keepall&&!get_bit(skip_flags, skip_header))
22162 {
22163 93 memcpy(Header, &tempheader, sizeof(tempheader));
22164 93 }
22165
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if(keepall&&!get_bit(skip_flags, skip_zinfo))
22166 {
22167 93 ZI.copyFrom(tempzi);
22168 93 }
22169
22170
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if(!keepall||get_bit(skip_flags, skip_maps))
22171 {
22172 map_count=old_map_count;
22173 }
22174
22175
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if(!keepall||get_bit(skip_flags, skip_rules))
22176 {
22177 memcpy(quest_rules, old_quest_rules, QUESTRULES_NEW_SIZE);
22178 memcpy(extra_rules, old_extra_rules, EXTRARULES_SIZE);
22179 }
22180
22181
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 93 times.
93 if(!keepall||get_bit(skip_flags, skip_midis))
22182 {
22183 memcpy(midi_flags, old_midi_flags, MIDIFLAGS_SIZE);
22184 }
22185
22186
2/4
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 93 times.
✗ Branch 3 not taken.
93 if(deletefilename[0] && exists(deletefilename))
22187 {
22188 93 delete_file(deletefilename);
22189 93 }
22190
22191 //Debug FFCore.quest_format[]
22192 93 al_trace("Quest made in ZC Version: %x\n", FFCore.quest_format[vZelda]);
22193 93 al_trace("Quest made in ZC Build: %d\n", FFCore.quest_format[vBuild]);
22194 93 al_trace("Quest Section 'Header' is Version: %d\n", FFCore.quest_format[vHeader]);
22195 93 al_trace("Quest Section 'Rules' is Version: %d\n", FFCore.quest_format[vRules]);
22196 93 al_trace("Quest Section 'Strings' is Version: %d\n", FFCore.quest_format[vStrings]);
22197 93 al_trace("Quest Section 'Misc' is Version: %d\n", FFCore.quest_format[vMisc]);
22198 93 al_trace("Quest Section 'Tiles' is Version: %d\n", FFCore.quest_format[vTiles]);
22199 93 al_trace("Quest Section 'Combos' is Version: %d\n", FFCore.quest_format[vCombos]);
22200 93 al_trace("Quest Section 'CSets' is Version: %d\n", FFCore.quest_format[vCSets]);
22201 93 al_trace("Quest Section 'Maps' is Version: %d\n", FFCore.quest_format[vMaps]);
22202 93 al_trace("Quest Section 'DMaps' is Version: %d\n", FFCore.quest_format[vDMaps]);
22203 93 al_trace("Quest Section 'Doors' is Version: %d\n", FFCore.quest_format[vDoors]);
22204 93 al_trace("Quest Section 'Items' is Version: %d\n", FFCore.quest_format[vItems]);
22205 93 al_trace("Quest Section 'Weapons' is Version: %d\n", FFCore.quest_format[vWeaponSprites]);
22206 93 al_trace("Quest Section 'Colors' is Version: %d\n", FFCore.quest_format[vColours]);
22207 93 al_trace("Quest Section 'Icons' is Version: %d\n", FFCore.quest_format[vIcons]);
22208 //al_trace("Quest Section 'Gfx Pack' is Version: %d; qst.cpp doesn't read this!\n", FFCore.quest_format[vGfxPack]);
22209 93 al_trace("Quest Section 'InitData' is Version: %d\n", FFCore.quest_format[vInitData]);
22210 93 al_trace("Quest Section 'Guys' is Version: %d\n", FFCore.quest_format[vGuys]);
22211 93 al_trace("Quest Section 'MIDIs' is Version: %d\n", FFCore.quest_format[vMIDIs]);
22212 93 al_trace("Quest Section 'Cheats' is Version: %d\n", FFCore.quest_format[vCheats]);
22213 //al_trace("Quest Section 'Save Format' is Version: %d; qst.cpp doesn't read this!\n", FFCore.quest_format[vSaveformat]);
22214 93 al_trace("Quest Section 'Combo Aliases' is Version: %d\n", FFCore.quest_format[vComboAliases]);
22215 93 al_trace("Quest Section 'Player Sprites' is Version: %d\n", FFCore.quest_format[vHeroSprites]);
22216 93 al_trace("Quest Section 'Subscreen' is Version: %d\n", FFCore.quest_format[vSubscreen]);
22217 93 al_trace("Quest Section 'Dropsets' is Version: %d\n", FFCore.quest_format[vItemDropsets]);
22218 93 al_trace("Quest Section 'FFScript' is Version: %d\n", FFCore.quest_format[vFFScript]);
22219 93 al_trace("Quest Section 'SFX' is Version: %d\n", FFCore.quest_format[vSFX]);
22220 93 al_trace("Quest Section 'Favorites' is Version: %d\n", FFCore.quest_format[vFavourites]);
22221 93 al_trace("Quest Section 'CompatRules' is Version: %d\n", FFCore.quest_format[vCompatRule]);
22222 //Print metadata for versions under 2.10 here. Bleah.
22223
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if( FFCore.quest_format[vZelda] < 0x210 )
22224 {
22225 zprint2("\n[ZQUEST CREATOR METADATA]\n");
22226
22227 switch(FFCore.quest_format[vZelda])
22228 {
22229 case 0x193:
22230 {
22231 zprint2("Last saved in ZC Editor Version: 1.93, Beta %d\n", FFCore.quest_format[vBuild]); break;
22232 }
22233 case 0x192:
22234 {
22235 zprint2("Last saved in ZC Editor Version: 1.92, Beta %d\n", FFCore.quest_format[vBuild]); break;
22236 }
22237 case 0x190:
22238 {
22239 zprint2("Last saved in ZC Editor Version: 1.90");
22240 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22241 else zprint2("\n");
22242 break;
22243 }
22244 case 0x188:
22245 {
22246 zprint2("Last saved in ZC Editor Version: 1.88");
22247 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22248 else zprint2("\n");
22249 break;
22250 }
22251 case 0x187:
22252 {
22253 zprint2("Last saved in ZC Editor Version: 1.87");
22254 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22255 else zprint2("\n");
22256 break;
22257 }
22258 case 0x186:
22259 {
22260 zprint2("Last saved in ZC Editor Version: 1.86");
22261 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22262 else zprint2("\n");
22263 break;
22264 }
22265 case 0x185:
22266 {
22267 zprint2("Last saved in ZC Editor Version: 1.85");
22268 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22269 else zprint2("\n");
22270 break;
22271 }
22272 case 0x184:
22273 {
22274 zprint2("Last saved in ZC Editor Version: 1.84");
22275 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22276 else zprint2("\n");
22277 break;
22278 }
22279 case 0x183:
22280 {
22281 zprint2("Last saved in ZC Editor Version: 1.83");
22282 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22283 else zprint2("\n");
22284 break;
22285 }
22286 case 0x182:
22287 {
22288 zprint2("Last saved in ZC Editor Version: 1.82");
22289 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22290 else zprint2("\n");
22291 break;
22292 }
22293 case 0x181:
22294 {
22295 zprint2("Last saved in ZC Editor Version: 1.81");
22296 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22297 else zprint2("\n");
22298 break;
22299 }
22300 case 0x180:
22301 {
22302 zprint2("Last saved in ZC Editor Version: 1.80");
22303 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22304 else zprint2("\n");
22305 break;
22306 }
22307 default:
22308 {
22309 zprint2("Last saved in ZC Editor Version: %x, Beta %d\n", FFCore.quest_format[vZelda],FFCore.quest_format[vBuild]); break;
22310 }
22311 }
22312 }
22313
22314 93 return qe_OK;
22315
22316 invalid:
22317 box_out("error.");
22318 box_eol();
22319 box_end(true);
22320
22321 if(f)
22322 {
22323 pack_fclose(f);
22324 }
22325
22326 if(!oldquest)
22327 {
22328 if(exists(tmpfilename))
22329 {
22330 delete_file(tmpfilename);
22331 }
22332
22333 if(deletefilename[0] && exists(deletefilename))
22334 {
22335 delete_file(deletefilename);
22336 }
22337 }
22338
22339 return qe_invalid;
22340
22341 93 }
22342
22343 93 int32_t loadquest(const char *filename, zquestheader *Header, miscQdata *Misc, zctune *tunes, bool show_progress, bool compressed, bool encrypted, bool keepall, byte *skip_flags, byte printmetadata, bool report, byte qst_num)
22344 {
22345 93 loading_qst_name = filename;
22346 93 loading_qst_num = qst_num;
22347 // In CI, builds are cached for replay tests, which can result in their build dates being earlier than what it would be locally.
22348 // So to avoid a more-recently update .qst file from hitting the "last saved in a newer version" prompt, we disable for replaying.
22349
1/2
✓ Branch 0 taken 93 times.
✗ Branch 1 not taken.
93 if (!replay_is_replaying())
22350 loadquest_report = report;
22351 93 int32_t ret = _lq_int(filename, Header, Misc, tunes, show_progress, compressed, encrypted, keepall, skip_flags,printmetadata);
22352 93 load_tmp_zi = NULL;
22353 93 loading_qst_name = NULL;
22354 93 loadquest_report = false;
22355 93 loading_qst_num = 0;
22356 93 return ret;
22357 }
22358 /*** end of qst.cc ***/
22359
22360